[反汇编练习] 160个CrackMe之004(CKme)详细分析
本帖最后由 pk8900 于 2017-6-2 00:11 编辑目标程序:[反汇编练习] 160个CrackMe之004
最近开始学习这160个CrackMe,今天晚上研究这个004,完成后搜了论坛以前发的贴子,没有完整的对这个CRACKME的解说,于是将的的分析过程分享一下,有不对的地方请指正。
下载地址:http://pan.baidu.com/share/link?shareid=541269&uk=4146939145
程序说明:没有按钮,只能两个文本框,一个用户名,一个注册码,作者提示:如果注册成功,程序中会出现"朱茵"小姐的一幅靓照。
程序运行后界面如下:
输入用户名和注册码后,程序没反应,下断点:GetDlgItemTextA,GetDlgItemTextW,GetWindowTextA,GetWindowTextW无效,TranslateMessage断点,设置条件按键事件可以成功断下,但跟踪了几回没发现有用的代码。
还是用DeDe反编译看一下吧。
程序调用的过程很少,有用的只有Edit2的事件(chkcode)和panel1的两个事件(单击事件和双击事件。)
按DeDe中的反编译事件地址,先对Edit2的事件(chkcode)代码下断点,跟踪后,代码有一个跳转为关键跳转。
00457D2C|.8B45 E0 mov eax, ;输入的序列号
00457D2F|.8B93 18030000 mov edx,dword ptr ds: ;黑头Sun Bird11dseloffc-012-OK+用户名
00457D35|.E8 52BFFAFF call CKme.00403C8C 这个CALL里对序列号进行对比,
00457D3A|.75 0A jnz short CKme.00457D46 ;关键比较,这个地方会写入“正确”的标志
00457D3C|.C783 0C030000>mov dword ptr ds:[ebx+0x30C],0x3E
这些代码已经可以看出,程序的正确注册码就是: 黑头Sun Bird11dseloffc-012-OK+用户名,输入正确后,把[ebx+0x30C]变量值改为0x3E,但接下来并没有显示图片。
接下来对panel1的两个事件(单击事件和双击事件。)代码分别下好断点,点击panel1触发:
00458031|.81BE 0C030000>cmp dword ptr ds:],0x85 ;比较注册标志,正确则调用显示图片代码
0045803B|.75 76 jnz short CKme.004580B3
0045803D|.33DB xor ebx,ebx
这里比较]是否为0x85 ,而之前chkcode中的值是0x3E,所以程序没有什么反应。接下来,取消单击事件的断点,对panel1双击,断了下来。
00457EF5|.83BE 0C030000>cmp dword ptr ds:,0x3E ;检查注册标志,如果是3E则不跳转,改为85
00457EFC|.75 0A jnz short CKme.00457F08
00457EFE|.C786 0C030000>mov dword ptr ds:,0x85 ;改为85
这回看明白了,在双击事件中若地址值为0x3E则改为0x85刚好满足单击事件中对地址值的检查。接下来,继续进行程序,对panel1单击,图片显示出来了。
至些程序破解完成,注册码是:黑头Sun Bird11dseloffc-012-OK+你输入的用户名,输入注码必须触发键盘事件(粘贴无效),后对图片框双击,此时如果在OD中对单击事件下了断点,则无法触发双击事件,也就不能把注册标志改为0x85,也就不能至达注册的最后步骤,也许这里就是作者说的“另外这个CKme还作了一点别的手脚”,只有双击事件触发成功后,再点击图片框才能完成最后的注册效果,本程序的重点不在于注册码的算法,而是注册的过程。
楼主的分析还有点瑕疵吧。算法没有完整分析出来。
Name随意
Serial = '黑头Sun Bird' + Name的长度加5 + 'dseloffc-012-OK' + Name本身
然后先双击那个Panel,再单击那个Panel,图片就会显示出来了。
提供一组Key:
Name : Kyle
Serial : 黑头Sun Bird9dseloffc-012-OKKyle
楼主再看看吧。祝好运。 preety110 发表于 2018-3-29 15:19
我用的OD1.1的哪个版本,好多东西和楼主显示的不一样,短点的位置也是不一样的。你的push ebp 在457C40,我 ...
不是OD的问题,457C40和4582D0是两个不同位置,4582D0是OEP,457C40是事件代码地址,push ebp 大多数子程序头部都是这句。Ctrl+G,可以转到指定代码位置。 看着楼主分析得好透彻,佩服得五体投地。我只想问楼主两个问题:1、您学破解多久了?2、您怎么知道汇编每句话的意思?3、汇编语言学了多久?想通过楼主的回复来解除心中的疑虑,进而学习破解技术 先收藏了,有空再仔细研究 很适合新手练习呢,呵呵,我也是新手 算法部分还是真疏忽了,没太深入的分析,'黑头Sun Bird'和 'dseloffc-012-OK是'两个字符串资源,二楼说的没错。,有时间再更新一下算法部分。 楼主分析的好详细,代码分析的也很到位,,DEDE运用的也很纯熟,只是那两个事件地址是怎么知道 的呢?截图没看懂 灰太狼大王 发表于 2017-6-2 06:29
先收藏了,有空再仔细研究
001的论坛已有人发贴,帖子地址:http://www.52pojie.cn/thread-264393-1-1.html byh3025 发表于 2017-6-2 08:25
楼主分析的好详细,代码分析的也很到位,,DEDE运用的也很纯熟,只是那两个事件地址是怎么知道 的呢?截图 ...
https://attach.52pojie.cn/forum/201706/01/231146qr4pqg3kprp63t22.png
事件 RVA 提示
RVA就是事件代码的地址。 pk8900 发表于 2017-6-2 08:40
事件 RVA 提示
RVA就是事件代码的地址。
嗯,谢谢你的解答