调试一个CM的记录
本帖最后由 byh3025 于 2017-3-18 13:12 编辑昨天晚上见有人发了一个CM,想拿它练练手,先打开看看是什么东东,怎么回事?直接弹错。
我可什么也没输入啊,况且也没看到有地方输入注册码,这时我看到文件夹内有一个KEY,莫非是在这里面输入?姑且试试吧,打开,然后在里面输入假码
好了,载入OD,然后去401000处,看样子像易语言,那我们就试试秒杀易语言大法吧
查找命令,输入TEST EDX,3
好,找到了,下断吧,F9运行,运行几次后我们就看到了真假码对比
下面我们来爆破它,CTRL+F9到段尾,记住返回值是0XFFFFFFFF,等一下我们有用
F8出CALL,这是什么鬼?没关系,我们右键,分析,从模块中删除分析就好了,这时我们看到一条指令:SETE AL它受上面CMP的影响,相等为真,EAX=1,反之为假,EAX=0
第一,我们可以把上面的MOV EAX,0改为MOV EAX,1,再把SETE ALNOP掉,就实现了爆破,如下图所示
第二,我们已经知道此时EAX=0XFFFFFFFF,那么我们就可以把CMP EAX,0X0 改为CMP EAX,0XFFFFFFFF,如下图所示,也实现了爆破的目的
当然,我们还可以用赋值法给EAX赋值为0,效果都是一样的,下面我们主要讲一下另类的爆破,由于搜索不到字符串,昨天看了一个调试易语言 的教程,就借用他的方法,下面看图吧,载入OD然后F9运行,直接弹错,别管它,F12暂停,查看-窗口,找到弹错的提示,右键-在CLASSPROC上设置消息断点,来到如下界面,点确定
下好断以后,重新加载程序,F9几次后我们在堆栈窗口看到了错误提示的内容,
这时我们取消断点,ALT+F9返回到程序领空,就是弹错的地方
单步F8出CALL,我们一眼就看到了一个JNZ能跳过它,那就改为JMP吧,改好后F9运行,我们发现成功了
由于是小白,当中难免会有许多不足之处,望路过的大年多多指教,其实我刚开始是相从正确提示入手的,由于昨天晚上弄得太晚了,头昏脑胀的,成功一次后忘记怎么弄的了,结果到现在也弄不好了。还有一个很诡异的地方,无论是错误提示返回还是正确提示返回,结果都是在一个地方,所以如果保存的话应该是不会成功的
0047F9F5 /75 16 jnz short 测试加密.0047FA0D
0047F9F7|. |FF75 10 push
0047F9FA|. |8B06 mov eax,dword ptr ds: ;测试加密.004B402C
0047F9FC|. |8BCE mov ecx,esi
0047F9FE|. |FF75 0C push
0047FA01|. |FF75 08 push
0047FA04|. |FF90 A0000000 call dword ptr ds:…………………………………正确提示框
0047FA0A|. |8945 FC mov ,eax
0047FA0D|> \8B45 FC mov eax,
0047FA10|.5E pop esi
0047FA11|.C9 leave
0047FA12\.C2 0C00 retn 0xC
0047F9F5 75 16 jnz short 测试加密.0047FA0D
0047F9F7|.FF75 10 push
0047F9FA|.8B06 mov eax,dword ptr ds: ;测试加密.004B3820
0047F9FC|.8BCE mov ecx,esi
0047F9FE|.FF75 0C push
0047FA01|.FF75 08 push
0047FA04|.FF90 A0000000 call dword ptr ds:…………………………………………错误提示框
0047FA0A|.8945 FC mov ,eax
0047FA0D|>8B45 FC mov eax,
0047FA10|.5E pop esi
0047FA11|.C9 leave
0047FA12\.C2 0C00 retn 0xC
我的图怎么没有了啊,第一次发帖,可能哪里没弄好,编辑时是有的,看看咋回事,回来再补吧 本帖最后由 byh3025 于 2017-4-25 10:23 编辑
图片没有了本来想弄下的,结果没弄好 没图片结合看起来云里雾里的呀 {:6_221:}看了你的教程,感觉你好厉害 看了你的教程感觉像是看戏{:5_118:} 好久不见,呵呵 haier8917 发表于 2022-12-12 22:04
好久不见,呵呵
大佬你好,昨天又看到了你的教程 感谢分享,正好需要,,,,
页:
[1]
2