今夕望月 发表于 2011-5-13 22:19

梦真QQ群发 软件的破解+过重启验证

本帖最后由 今夕望月 于 2011-5-13 22:29 编辑

没有任何的企图,破之只是为了交流。。软件很简单,就像我一样菜。。不知道有人发过没,如果有人发过就算我抄袭好了
【软件名称:】梦真QQ群发器
【官方网站】去百度吧
【工具】peid+od
开始。。。
首先用peid 查壳,惯例


简单的壳,大家都会脱,直接ESP定律马上就到OEP,脱掉之后查是C++写的,实际上看看文件夹里“krnln.fnr”这样的文件就知道是E语言写的了。
多的不说,开始开刀。
OD加载,运行,注册, 弹出错误框,到OD中F12暂停,然后查看调用堆栈,发现这个
双击进入,看到1006249E    6A 00         push    0
100624A0    FF15 9C160C10   call    dword ptr [<&USER32.MessageBoxA>>; USER32.MessageBoxA
100624A6    5F            pop   edi                              ; 这里下个断
100624A7    83F8 03         cmp   eax, 3
100624AA    5E            pop   esi
100624AB    75 0F         jnz   short 100624BC
100624AD    8B4C24 68       mov   ecx, dword ptr
然后F9让程序跑起来,但提示框中点确认,程序就断了,取消断点,我们F8往下走真到回到程序领空
10028E39    8B4424 0C       mov   eax, dword ptr
10028E3D    8B5424 10       mov   edx, dword ptr
10028E41    8B4C24 14       mov   ecx, dword ptr
10028E45    83C4 18         add   esp, 18
10028E48    C3            retn
先回到了这里,继续F8走,就返回到这里了
005B799E    68 03000000   push    3
005B79A3    BB 00030000   mov   ebx, 300
005B79A8    E8 1E670000   call    005BE0CB                         ; 错误
005B79AD    83C4 28         add   esp, 28
005B79B0    8B5D FC         mov   ebx, dword ptr
005B79B3    85DB            test    ebx, ebx
这里直接看是很难找到怎么跳过来的,我们一路往上翻,发现有些有趣的东西
005B78BA    6A 00         push    0
005B78BC    68 05A04F00   push    004FA005                         ; ASCII "false"这个很可疑哦
005B78C1    68 04000080   push    80000004
005B78C6    6A 00         push    0
005B78C8    8B45 F0         mov   eax, dword ptr
005B78CB    85C0            test    eax, eax
005B78CD    75 05         jnz   short 005B78D4
这里,我们可以在程序文件夹里看见key正是保存注册码的键值(是键值么,我不知道INI里怎么叫),这里估计是成功后保存键值
005B77F0    B8 0B494F00   mov   eax, 004F490B                  ; ASCII "KEY"
005B77F5    8945 E8         mov   dword ptr , eax
005B77F8    8D45 E8         lea   eax, dword ptr
005B77FB    50            push    eax
005B77FC    E8 D72CFEFF   call    0059A4D8                         ; 推测是保存键值
005B7801    8B5D E8         mov   ebx, dword ptr
005B7804    85DB            test    ebx, ebx
我们继续往上看,true 是不是很心动,005B771F    68 04000080   push    80000004
005B7724    6A 00         push    0
005B7726    68 E39F4F00   push    004F9FE3                         ; ASCII "ture"
005B772B    68 04000080   push    80000004
005B7730    6A 00         push    0
005B7732    8B45 F0         mov   eax, dword ptr
005B7735    85C0            test    eax, eax
这里,想到了什么?网络验证?
005B76AA    3BC8            cmp   ecx, eax
005B76AC    0F8F B7020000   jg      005B7969
005B76B2    8965 EC         mov   dword ptr , esp
005B76B5    FF75 FC         push    dword ptr
005B76B8    68 B69F4F00   push    004F9FB6                         ; ASCII "http://www.qqjilu.com/soft/QQqf/GetTimes.asp"
005B76BD    B8 65000000   mov   eax, 65
005B76C2    E8 F8690000   call    005BE0BF
005B76C7    3965 EC         cmp   dword ptr , esp
005B76CA    74 0D         je      short 005B76D9
005B76CC    68 06000000   push    6
继续往上看看这里005B7654    3BC8            cmp   ecx, eax                         ; eax与1比较
005B7656    0F8F 17030000   jg      005B7973                         ; 这里跳走了   这个跳完全可以跳过去下面的网络验证等等好多东西,推测是关键,实际上多次实验发现这里的确是关键,不跳就注册成功了
005B765C    68 04000080   push    80000004
005B7661    6A 00         push    0
005B7663    68 D9494F00   push    004F49D9                         ; ASCII "101700000101700000"
005B7668    68 01000000   push    1
005B766D    BB E0090000   mov   ebx, 9E0
005B7672    E8 546A0000   call    005BE0CB
005B7677    83C4 10         add   esp, 10
005B767A    33C9            xor   ecx, ecx
005B767C    3955 F8         cmp   dword ptr , edx
005B767F    7F 08         jg      short 005B7689
还是继续往上看看吧
005B75FE    3BC8            cmp   ecx, eax
005B7600    0F8F 77030000   jg      005B797D                         ; 跳到失败处,改了就成功 。。这个地方第一次是不跳的,程序还会跳会这里一次,第二次就不跳了,要改。起初以为这里是关键,后来发现其实                         改上面005B7656那个跳就够了继续往上,看见好多浮点,让人感觉像是注册码的事005B74F1    83C4 10         add   esp, 10
005B74F4    8945 E4         mov   dword ptr , eax
005B74F7    DB45 E4         fild    dword ptr                ; 有什么处理?
005B74FA    DD5D E4         fstp    qword ptr
005B74FD    DD45 E4         fld   qword ptr
005B7500    DC25 F90B4F00   fsub    qword ptr
005B7506    DD5D DC         fstp    qword ptr
005B7509    DD45 DC         fld   qword ptr
再看到上面,这里基本上就上判别注册码的开始了005B743B    68 B00D0152   push    52010DB0
005B7440    E8 986C0000   call    005BE0DD                         ; 取注册码。。。
005B7445    83C4 10         add   esp, 10
005B7448    8945 EC         mov   dword ptr , eax
005B744B    C745 E4 0000000>mov   dword ptr , 0
005B7452    C745 E8 0000000>mov   dword ptr , 0
005B7459    6A 00         push    0
005B745B    FF75 E8         push    dword ptr
005B745E    FF75 E4         push    dword ptr
005B7461    8D45 EC         lea   eax, dword ptr
005B7464    50            push    eax
005B7465    E8 BB6EFFFF   call    005AE325                         ; 注册码运算?,好多重复的浮点。。005AE325记着这个地址,重启时会有大发现.
005B746A    8945 E0         mov   dword ptr , eax
005B746D    8B5D EC         mov   ebx, dword ptr           ; 注册码
005B7470    85DB            test    ebx, ebx
好了,我们就直接 断在 005B7656 ,再输入注册码,确定,断在这里,不让它跳,OK,注册成功。
我们重新载入程序,这时怎么了?


OD报错了!断点不可用吗,我们去断点列表,发现断点被禁止了,而且反汇编也不一样!
这怎么办?先运行下,再看断点,发现反汇编又一样了,这时把断点激活,程序一样可以断下。
估计程序开始得要解码下,不知道是不是壳没脱干净的原因,我不知道,,先不管这个
**********************************
下面说重启验证的问题,软件重新运行继续提示未注册,那我们上面做的工作不是白费了?不会这么恶心,程序作者很仁慈的。

我们知道是INI了,所以我们下断bp GetPrivateProfileStringA,运行,断啊断啊断,知道堆栈中键值为key的时候返回。这是个漫长的过程。。。
005971A7    68 04000000   push    4
005971AC    BB C8080000   mov   ebx, 8C8
005971B1    E8 156F0200   call    005BE0CB                         ; 读ini的作用F8单步,005ACFEB    E8 BD100100   call    005BE0AD
005ACFF0    83C4 04         add   esp, 4
005ACFF3    58            pop   eax
005ACFF4    8B5D E8         mov   ebx, dword ptr
005ACFF7    8903            mov   dword ptr , eax
005ACFF9    E8 50100000   call    005AE04E                         ; 时间长了一点,很可疑,进去看看
005ACFFE    8B1D E005BC00   mov   ebx, dword ptr
005AD004    895D E8         mov   dword ptr , ebx
005AD007    8B5D E8         mov   ebx, dword ptr
005AD00A    833B 00         cmp   dword ptr , 0
这么个情况。。。


完全一样。。。好了。无压力了,你知道怎么弄的
005AE26F    50            push    eax
005AE270    3BC8            cmp   ecx, eax
005AE272    0F8F 80000000   jg      005AE2F8                         ; 这个不跳就可以了
005AE278    68 04000080   push    80000004
005AE27D    6A 00         push    0
005AE27F    68 D9494F00   push    004F49D9                         ; ASCII "101700000101700000"
005AE284    68 01000000   push    1
005AE289    BB E0090000   mov   ebx, 9E0
005AE28E    E8 38FE0000   call    005BE0CB
005AE293    83C4 10         add   esp, 10
005AE296    33C9            xor   ecx, ecx
005AE298    3955 F8         cmp   dword ptr , edx
005AE29B    7F 08         jg      short 005AE2A5
这里改过以后程序就直接会进去主界面,而且注册按钮是灰色的。。程序就算是搞定了吧
****************************************************
另外由于程序存在一个解码问题,所以如果想破解的话还是打内存补丁比较好keymake测试通过。。


完了。。写这玩意好累











Emil 发表于 2011-5-13 22:31

很好 很详细 谢谢分享

54rock 发表于 2011-5-13 22:31

厉害·顶一下

kubi 发表于 2011-5-13 22:46

不懂啊   感谢楼主分享

今夕望月 发表于 2011-5-13 23:56

回复 kubi 的帖子

这还不懂啊。。。走一遍就懂了

今夕望月 发表于 2011-5-14 10:33

其实断下来可以试试堆栈返回的

kingbaby 发表于 2011-5-14 11:03

回复 今夕望月 的帖子

这个我以前也搞过不过是爆破的所以那个去验证的不是很懂。。

今夕望月 发表于 2011-5-14 11:23

回复 kingbaby 的帖子

这个的确是爆破啊

792404868@qq.co 发表于 2011-5-14 19:37

很好的东西 谢谢了。

snfqpshn 发表于 2011-5-14 20:00

你太牛了,可惜我也看不懂
页: [1] 2 3 4 5 6 7
查看完整版本: 梦真QQ群发 软件的破解+过重启验证