CrackMe —— 004

160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序

CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。

CrackMe简称CM。
程序下载地址:点击我

来源 <-点击查看

编号 作者 保护方式
004 ajj Name/Serial(Delphi)
005 ajj Serial(Delphi)

工具

x32dbg

DelphiDecompiler

peid

LordPE

ImportREC

开始破解之旅

ON.1

使用x32dbg打开004号程序,和程序一起的还有一个帮助文件,从文件中我们得知程序是Delphi

打开程序,我们发现没有一个确认按钮,这下应该怎么来操作呢?

先搜索字符串

地址=004580A9
反汇编=mov edx,ckme.458114
字符串="恭喜恭喜!注册成功"

双击,在这个地址向上翻看

第二个跳转跳过了注册成功,该跳转为注册码判断跳转将其NOP,输入框被输入数据????怎么没有任何反应

我们使用DelphiDecompiler 来打开004号程序,该程序是一个Delphi反编译程序,点击Procedures,在Events窗口下发现单击,双击事件和一个chkcode,chkcode汉意疑似检测code

回到程序,我们单击bingo~,结果出现了,美丽的朱茵小姐出现了

接下来我们使用追码的方式来尝试破解

记录两个地址 00457E7C ,00457FB8和00457C40 在x32dbg 中设置断点,来到程序在输入框内输入数据,单击

停在了断点处

单步向下开始走

到达00457C88处时出现dseloffc-012-OK 疑似注册码,继续单步向下

00457C50 | 51                       | push ecx                                |
00457C51 | 874D FC | xchg dword ptr ss:[ebp-4],ecx |
00457C54 | 53 | push ebx | ebx:"紋E"
00457C55 | 56 | push esi |
00457C56 | 8BD8 | mov ebx,eax | ebx:"紋E", eax:&"10""
00457C58 | 33C0 | xor eax,eax | eax:&"10"
00457C5A | 55 | push ebp |
00457C5B | 68 3D7E4500 | push ckme.457E3D |
00457C60 | 64:FF30 | push dword ptr fs:[eax] |
00457C63 | 64:8920 | mov dword ptr fs:[eax],esp |
00457C66 | 8BB3 F8020000 | mov esi,dword ptr ds:[ebx+2F8] |
00457C6C | 83C6 05 | add esi,5 |
00457C6F | FFB3 10030000 | push dword ptr ds:[ebx+310] | [ebx+310]:"黑头Sun Bird"
00457C75 | 8D55 F8 | lea edx,dword ptr ss:[ebp-8] | [ebp-8]:"10"
00457C78 | 8BC6 | mov eax,esi | eax:&"10"
00457C7A | E8 85FEFAFF | call ckme.407B04 |
00457C7F | FF75 F8 | push dword ptr ss:[ebp-8] | [ebp-8]:"10"
00457C82 | FFB3 14030000 | push dword ptr ds:[ebx+314] | [ebx+314]:"dseloffc-012-OK" 疑似注册码
00457C88 | 8D55 F4 | lea edx,dword ptr ss:[ebp-C] |
00457C8B | 8B83 D4020000 | mov eax,dword ptr ds:[ebx+2D4] | eax:&"10", [ebx+2D4]:"聪A"
00457C91 | E8 B2B6FCFF | call ckme.423348 |
00457C96 | FF75 F4 | push dword ptr ss:[ebp-C] |
00457C99 | 8D83 18030000 | lea eax,dword ptr ds:[ebx+318] | eax:&"10", [ebx+318]:"黑头Sun Bird10dseloffc-012-OK12345"
00457C9F | BA 04000000 | mov edx,4 |
00457CA4 | E8 93BFFAFF | call ckme.403C3C |
00457CA9 | 33D2 | xor edx,edx |
00457CAB | 8B83 F4020000 | mov eax,dword ptr ds:[ebx+2F4] | eax:&"10", [ebx+2F4]:&"HPB"
00457CB1 | E8 AAB5FCFF | call ckme.423260 |
00457CB6 | 8B93 18030000 | mov edx,dword ptr ds:[ebx+318] | [ebx+318]:"黑头Sun Bird10dseloffc-012-OK12345"
00457CBC | 8B83 F4020000 | mov eax,dword ptr ds:[ebx+2F4] | eax:&"10", [ebx+2F4]:&"HPB"
00457CC2 | E8 B1B6FCFF | call ckme.423378 |
00457CC7 | 33F6 | xor esi,esi |
00457CC9 | 8D55 EC | lea edx,dword ptr ss:[ebp-14] |

继续单步向下发现00457CBC处[ebx+318]堆栈处出现一串更长的字符串,疑似注册码也在里面,难道这个才是真正的注册码吗,记录下来

在注册码内输入“黑头Sun Bird10dseloffc-012-OK12345”双击窗口,图片显示成功

我们换个账号765 发现注册码变了“黑头Sun Bird8dseloffc-012-OK765” 中间10变为了8 ,最后12345变为了765,观察发现最后应该是账号

中间应该是计算所得

发现8在00457C7F压入栈内

00457C7F | FF75 F8                  | push dword ptr ss:[ebp-8]               | [ebp-8]:L"8"

向上翻看,发现00457C44和00457C4E为计算8的方式

00457C44 | B9 05000000              | mov ecx,5                               |
00457C49 | 6A 00 | push 0 |
00457C4B | 6A 00 | push 0 |
00457C4D | 49 | dec ecx |
00457C4E | 75 F9 | jne ckme.457C49 |

固定变量5,5+用户名长度

注册码计算方式为“黑头Sun Bird”+用户名长度+“dseloffc-012-OK”+用户名

CrackMe —— 005

NO.1

用PEID查壳,发现存在UPX

我们脱壳,在程序入口处停下来,单步一次,发现寄存器窗口ESP变为红色

在ESP处右键内存窗口转到,在该位置下硬件断点,F9运行

此时停在了我们的OEP

0044768C    55              push ebp
0044768D 8BEC mov ebp,esp
0044768F 83C4 F4 add esp,-0xC
00447692 B8 2C754400 mov eax,CKme002.0044752C ; UNICODE "+"
00447697 E8 20EAFBFF call CKme002.004060BC
0044769C A1 D88C4400 mov eax,dword ptr ds:[0x448CD8]
004476A1 8B00 mov eax,dword ptr ds:[eax]
004476A3 E8 64A4FFFF call CKme002.00441B0C

打开LordPE

找到我们的进程,右键修复镜像大小,再次右键完整转存

接下来使用ImportRec修复IAT

输入OEP地址4768C 查找IAT,获取输入表,点击无效函数,在无效函数处删除指针->转储到文件

提示:此处不要选择剪切指针,否则会程序会异常

脱壳成功

ON.2

搜索字符串发现“注册了”字符串,进入地址向上翻看发现多个跳转

发现跳转全部跳过注册成功,将其全部NOP

运行,发现界面发生变化,破解成功

通过查看字符串发现一个疑似文件地址,跳转到汇编处发现会读取X盘内ok.txt文件

地址=00446D49
反汇编=mov edx,dumped_.446DEC
字符串="X:\\ajj.126.c0m\\j\\o\\j\\o\\ok.txt"

在X盘内,博主只有一个C盘,感觉到了无穷的麻烦....这部分交给正在观看本文章的你啦(^_^)

逆向破解之160个CrackMe —— 004-005的更多相关文章

  1. 逆向破解之160个CrackMe —— 001

    CrackMe —— 001 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  2. 逆向破解之160个CrackMe —— 002-003

    CrackMe —— 002 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  3. 逆向破解之160个CrackMe —— 013

    CrackMe —— 013 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  4. 逆向破解之160个CrackMe —— 014

    CrackMe —— 014 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  5. 逆向破解之160个CrackMe —— 016

    CrackMe —— 016 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  6. 逆向破解之160个CrackMe —— 017

    CrackMe —— 017 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  7. 逆向破解之160个CrackMe —— 018

    CrackMe —— 018 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  8. 逆向破解之160个CrackMe —— 025

    CrackMe —— 025 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  9. 逆向破解之160个CrackMe —— 026

    CrackMe —— 026 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

随机推荐

  1. SpringBoot开发案例之分布式集群共享Session

    前言 在分布式系统中,为了提升系统性能,通常会对单体项目进行拆分,分解成多个基于功能的微服务,如果有条件,可能还会对单个微服务进行水平扩展,保证服务高可用. 那么问题来了,如果使用传统管理 Sessi ...

  2. 分布式个人理解概述和dubbo实现简述

    什么是分布式?为什么使用分布式? 个人有一些浅薄的理解希望可以批评指正,从概念和应用 两个方面概述:      一.概念:分布式也叫分布式服务,也就是说 他是 一种面向服务思想的程序设计和架构风格,典 ...

  3. kd树原理及实现

    常用来作空间划分及近邻搜索,是二叉空间划分树的一个特例.通常,对于维度为k,数据点数为N的数据集,kd树适用于N≫2的k次方的情形. 1维数据的查询 假设在数据库的表格T中存储了学生的语文成绩chin ...

  4. UVALive 6255:Kingdoms(状压DFS)

    题目链接 题意 给出n个王国和n*n的矩阵,mp[i][j] 代表第 i 个王国欠第 j 个王国 mp[i][j] 块钱.如果当前的王国处于负债状态,那么这个王国就会被消除,和它相连的王国的债务都会被 ...

  5. Codeforces 781A:Andryusha and Colored Balloons(DFS染色)

    http://codeforces.com/contest/782/problem/C 题意:给一棵树染最少的颜色,使得相邻距离为2的点都是不同的颜色,问最少是多少种颜色并输出每个点的颜色. 思路:比 ...

  6. OC CollectionView和TableView自身高度的隐式递归计算,改变父试图布局

    CollectionView和TableView自身高度的隐式递归计算 1.前沿:我们一般会碰到这样的需求,一个tableview或者一个colletionview放在一个scrollview上边,而 ...

  7. c++学习书籍推荐《深入理解C++11 C++11新特性解析与应用》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <深入理解C++11:C++11新特性解析与应用>编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑.系统.深 ...

  8. 使用Task实现非阻塞式的I/O操作

    在前面的<基于任务的异步编程模式(TAP)>文章中讲述了.net 4.5框架下的异步操作自我实现方式,实际上,在.net 4.5中部分类已实现了异步封装.如在.net 4.5中,Strea ...

  9. C语言指针专题——为何要学习指针

    欢迎转发本文! 之前的文章与各位谈论了指针是什么,以及指针为何这那么难学.不少知友留言说看了我的文章对指针了解了不少,这给我继续创作提供了莫大的动力啊.指针其实就是一个纸老虎,你看着可怕,等你了解其本 ...

  10. 20140115-URL编码与解码

    UrlEncode()方法,有两个类都有这个方法即HttpUtility.UrlEncode和Server.UrlEncode 区别: 1.HttpUtility.UrlEncode,HttpUtil ...