byh3025 发表于 2017-3-17 22:30

几种方法调试一个CM

本帖最后由 byh3025 于 2017-4-25 10:08 编辑

昨天晚上见论坛有人发了一个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运行,我们发现成功了

由于是小白,当中难免会有许多不足之处,望路过的大年多多指教,其实我刚开始是相从正确提示入手的,由于昨天晚上弄得太晚了,头昏脑胀的,成功一次后忘记怎么弄的了,结果到现在也弄不好了。
PS:还有一个问题,我的OD下面的Commadd不知怎么回事消失不见了,谁能说下是什么问题吗?谢谢了






byh3025 发表于 2017-3-18 12:58

酒醒黄昏 发表于 2017-3-18 10:16
把这个CM 地址给我一下 看看

还有一个很诡异的地方,无论是错误提示返回还是正确提示返回,结果都是在一个地方,所以如果保存的话应该是不会成功的

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-3-18 10:04

Hmily 发表于 2017-3-17 23:23
第一个方法是怎么总结出来的?那地方是易语言的通用对比函数特征?

命令行那个strongod插件提供,看看选 ...

呵呵,大神见笑了,我哪里会总结什么啊,只是用了秒杀易语言的方法,既然有真假码的对比,那它就会计算出一个结果,然后拿这个结果去比较的。另外命令行那个strongod插件选项大神能说详细点吗?我怎么找不到呢,谢谢了

ttwang 发表于 2017-3-17 22:52

学习楼主好技术,感谢分享

Hmily 发表于 2017-3-17 23:23

第一个方法是怎么总结出来的?那地方是易语言的通用对比函数特征?

命令行那个strongod插件提供,看看选项是不是关了。

苏紫方璇 发表于 2017-3-17 23:26

Hmily 发表于 2017-3-17 23:23
第一个方法是怎么总结出来的?那地方是易语言的通用对比函数特征?

命令行那个strongod插件提供,看看选 ...

目测那个地方是易语言的文本比较

酒醒黄昏 发表于 2017-3-18 09:10

熟能生巧   多练几遍办法很多种,但目的只有一个,到成功的时候就发现前边所有的切入口都差不多。加油。另外最后一个暂停法不适合用,比较繁杂,建议用消窗断点拦截,然后直接在右下键的窗口找,最后回溯下断点就简单多了。

KaQqi 发表于 2017-3-18 09:17

苏紫方璇 发表于 2017-3-17 23:26
目测那个地方是易语言的文本比较

那玩意是怎么总结的?

andaOid 发表于 2017-3-18 10:05

额,我还算是小白,,但是我也看看,先谢楼主

byh3025 发表于 2017-3-18 10:13

酒醒黄昏 发表于 2017-3-18 09:10
熟能生巧   多练几遍办法很多种,但目的只有一个,到成功的时候就发现前边所有的切入口都差不多。加油。 ...

我试了,它这个用消息窗口是断不下来

酒醒黄昏 发表于 2017-3-18 10:16

byh3025 发表于 2017-3-18 10:13
我试了,它这个用消息窗口是断不下来

把这个CM 地址给我一下 看看
页: [1] 2 3 4
查看完整版本: 几种方法调试一个CM