No_what_can't 发表于 2014-3-10 15:52

书生CrackMe破文---记录学习过程

本帖最后由 L4Nce 于 2014-3-10 17:41 编辑

【文章标题】: 书生--破解思路
【文章作者】: 书生
【软件名称】: 新手写的CM,求践踏,侮辱,各种爆,各种追
【下载地址】: http://www.52pojie.cn/thread-240736-3-1.html
【加壳方式】: 无
【使用工具】: OD
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
拿到易语言首先想到的FF 55 FC 5F 5E按钮事件断点吧

Ctrl+B搜索FF 55 FC 5F 5E按钮事件发现一直被断下不用想了 作者加了时钟立马想到干掉时钟 Bp SetTimer 干掉时钟运行 发现点击按钮后提示空白

立马知道了 作者是在 时钟里赋值成功 或者失败的所以这里我们不干掉时钟 否则就永远不成功了0.0

呵呵

上面仅是思路 下面才是重点

我们在按钮事件上 下条件断点

!=0040142A&!=00401211

这时输入注册码 点击按钮

好断下后F7进入

00401004/.55            push    ebp
00401005|.8BEC          mov   ebp, esp
00401007|.81EC 08000000 sub   esp, 0x8
0040100D|.8965 FC       mov   dword ptr , esp
00401010|.68 D0814800   push    004881D0
00401015|.68 00000000   push    0x0
0040101A|.68 00000000   push    0x0
0040101F|.68 68114000   push    00401168
00401024|.68 00000000   push    0x0
00401029|.68 00000000   push    0x0
0040102E|.B8 00000000   mov   eax, 0x0
00401033|.E8 08050000   call    00401540
00401038|.3965 FC       cmp   dword ptr , esp
0040103B|.74 0D         je      short 0040104A
0040103D|.68 06000000   push    0x6
00401042|.E8 F3040000   call    0040153A
00401047|.83C4 04       add   esp, 0x4
0040104A|>A3 D0814800   mov   dword ptr , eax
0040104F|.68 01030080   push    0x80000301
00401054|.6A 00         push    0x0
00401056|.68 C8000000   push    0xC8
0040105B|.68 01000000   push    0x1
00401060|.B8 01000000   mov   eax, 0x1
00401065|.BB 508A4400   mov   ebx, 00448A50
0040106A|.E8 E3040000   call    00401552
0040106F|.83C4 10       add   esp, 0x10
00401072|.68 05000080   push    0x80000005
00401077|.6A 00         push    0x0
00401079|.A1 D4814800   mov   eax, dword ptr
0040107E|.85C0          test    eax, eax
00401080      75 05         jnz   short 00401087
00401082|.B8 FCAC4600   mov   eax, 0046ACFC
00401087|>50            push    eax
00401088|.68 01000000   push    0x1
0040108D|.BB C0164000   mov   ebx, 004016C0
00401092|.E8 B5040000   call    0040154C
00401097|.83C4 10       add   esp, 0x10
0040109A|.8945 FC       mov   dword ptr , eax
0040109D|.6A 00         push    0x0
0040109F|.6A 00         push    0x0
004010A1|.6A 00         push    0x0
004010A3|.68 01030080   push    0x80000301
004010A8|.6A 00         push    0x0
004010AA|.68 00000000   push    0x0
004010AF|.68 04000080   push    0x80000004
004010B4|.6A 00         push    0x0
004010B6|.8B45 FC       mov   eax, dword ptr
004010B9|.85C0          test    eax, eax
004010BB|.75 05         jnz   short 004010C2
004010BD|.B8 04AD4600   mov   eax, 0046AD04
004010C2|>50            push    eax
004010C3|.68 03000000   push    0x3
004010C8|.BB F0174000   mov   ebx, 004017F0
004010CD|.E8 7A040000   call    0040154C
004010D2|.83C4 28       add   esp, 0x28
004010D5|.8B5D FC       mov   ebx, dword ptr
004010D8|.85DB          test    ebx, ebx
004010DA|.74 09         je      short 004010E5
004010DC|.53            push    ebx
004010DD|.E8 46040000   call    00401528
004010E2|.83C4 04       add   esp, 0x4
004010E5|>8BE5          mov   esp, ebp
004010E7|.5D            pop   ebp
004010E8\.C3            retn

---------------------------------------------------------------------

00401079|.A1 D4814800   mov   eax, dword ptr 取常量内容给eax
0040107E|.85C0          test    eax, eax比较eax
00401080      75 05         jnz   short 00401087 是否跳转
00401082|.B8 FCAC4600   mov   eax, 0046ACFC不跳转就赋值
00401087|>50            push    eax    压入栈eax
00401088|.68 01000000   push    0x1    压入栈1
0040108D|.BB C0164000   mov   ebx, 004016C0把004016C0给ebx
00401092|.E8 B5040000   call    0040154C
00401097|.83C4 10       add   esp, 0x10
0040109A|.8945 FC       mov   dword ptr , eax 这里吧eax给ebp-0x4
0040109D|.6A 00         push    0x0
0040109F|.6A 00         push    0x0
004010A1|.6A 00         push    0x0
004010A3|.68 01030080   push    0x80000301
004010A8|.6A 00         push    0x0
004010AA|.68 00000000   push    0x0
004010AF|.68 04000080   push    0x80000004
004010B4|.6A 00         push    0x0
004010B6|.8B45 FC       mov   eax, dword ptr 然后又把 给eax
004010B9|.85C0          test    eax, eax对比eax这里我们使用命令dd eax 然后数据窗口HEX--16位发现里面内容是:注册码不对,还需要努力然后我们往上面看eax最初的值是谁赋的 当然是0x4881D4这个常量
我们对这个常量下内存写入断点
004010BB|.75 05         jnz   short 004010C2如果不跳转的话默认赋值这里是跳转的
004010BD|.B8 04AD4600   mov   eax, 0046AD04赋值

内存写入断点断在

00401307|.A3 D4814800   mov   dword ptr , eax
0040130C|>8BE5          mov   esp, ebp
0040130E|.5D            pop   ebp
0040130F\.C3            retn
然后我们往上面找 注意 mov   dword ptr , eax 这样的语句

00401295   /0F84 3B000000 je      004012D6
0040129B|. |B8 1BAD4600   mov   eax, 0046AD1B
004012A0|. |85C0          test    eax, eax
004012A2|. |74 13         je      short 004012B7
004012A4|. |50            push    eax
004012A5|. |8B40 04       mov   eax, dword ptr
004012A8|. |83C0 08       add   eax, 0x8
004012AB|. |50            push    eax
004012AC|. |E8 95020000   call    00401546
004012B1|. |59            pop   ecx
004012B2|. |5E            pop   esi
004012B3|. |8BF8          mov   edi, eax
004012B5|. |F3:A4         rep   movs byte ptr es:, byte ptr>
004012B7|> |50            push    eax
004012B8|. |8B1D D4814800 mov   ebx, dword ptr
004012BE|. |85DB          test    ebx, ebx
004012C0|. |74 09         je      short 004012CB
004012C2|. |53            push    ebx
004012C3|. |E8 60020000   call    00401528
004012C8|. |83C4 04       add   esp, 0x4
004012CB|> |58            pop   eax
004012CC|. |A3 D4814800   mov   dword ptr , eax
004012D1|. |E9 36000000   jmp   0040130C
004012D6|> \B8 4BAD4600   mov   eax, 0046AD4B
004012DB|.85C0          test    eax, eax
004012DD|.74 13         je      short 004012F2
004012DF|.50            push    eax
004012E0|.8B40 04       mov   eax, dword ptr
004012E3|.83C0 08       add   eax, 0x8
004012E6|.50            push    eax
004012E7|.E8 5A020000   call    00401546
004012EC|.59            pop   ecx
004012ED|.5E            pop   esi
004012EE|.8BF8          mov   edi, eax
004012F0|.F3:A4         rep   movs byte ptr es:, byte ptr>
004012F2|>50            push    eax
004012F3|.8B1D D4814800 mov   ebx, dword ptr
004012F9|.85DB          test    ebx, ebx
004012FB|.74 09         je      short 00401306
004012FD|.53            push    ebx
004012FE|.E8 25020000   call    00401528
00401303|.83C4 04       add   esp, 0x4
00401306|>58            pop   eax
00401307|.A3 D4814800   mov   dword ptr , eax


你会发现00401295 这条语句就是关键跳了Nop掉即可

菜鸟第一次写破文 写的不好 大大们别见笑希望在这里能找到几个一起学习的朋友一起学习研究 加好友


--------------------------------------------------------------------------------
【经验总结】
这几天的学习没白学 呵呵

--------------------------------------------------------------------------------
【版权声明】: 本文原创于书生, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2014年03月10日 15:51:19


shu810687117 发表于 2014-3-10 15:54

支持一下吧,加油

hzg303 发表于 2014-3-10 15:56

似乎不是很难的哟

No_what_can't 发表于 2014-3-10 15:58

hzg303 发表于 2014-3-10 15:56
似乎不是很难的哟

偶是菜鸟一个大神们别见笑我老忘 所以写下来 下次还能看{:1_907:}

loveliuhao323 发表于 2014-3-10 16:02

以后出视频教程吧

381400744 发表于 2014-3-10 17:31

页: [1]
查看完整版本: 书生CrackMe破文---记录学习过程