能力值:
( LV6,RANK:90 )
|
-
-
2 楼
::0042AC5C:: 55 PUSH EBP
::0042AC5D:: 8BEC MOV EBP,ESP
::0042AC5F:: 81EC 18000000 SUB ESP,18
::0042AC65:: 6A FF PUSH -1
::0042AC67:: 6A 08 PUSH 8 内容(“编辑框2”的属性)
::0042AC69:: 68 E5030116 PUSH 160103E5 编辑框2(编辑框)
::0042AC6E:: 68 01000152 PUSH 52010001 窗体单元1(父窗体)
::0042AC73:: E8 656F0000 CALL 00431BDD 取窗体对象属性(调用4号服务)
::0042AC78:: 83C4 10 ADD ESP,10
::0042AC7B:: 8945 FC MOV [EBP-4],EAX
::0042AC7E:: 6A FF PUSH -1
::0042AC80:: 6A 08 PUSH 8 内容(“编辑框1”的属性)
::0042AC82:: 68 E4030116 PUSH 160103E4 编辑框1(编辑框)
::0042AC87:: 68 01000152 PUSH 52010001 窗体单元1(父窗体)
::0042AC8C:: E8 4C6F0000 CALL 00431BDD 取窗体对象属性(调用4号服务)
::0042AC91:: 83C4 10 ADD ESP,10
::0042AC94:: 8945 F8 MOV [EBP-8],EAX
::0042AC97:: 6A 01 PUSH 1
::0042AC99:: 8D45 F8 LEA EAX,[EBP-8]
::0042AC9C:: 50 PUSH EAX
::0042AC9D:: 6A 01 PUSH 1
::0042AC9F:: B8 73314000 MOV EAX,403173 linked(常量)
::0042ACA4:: 8945 F4 MOV [EBP-C],EAX
::0042ACA7:: 8D45 F4 LEA EAX,[EBP-C]
::0042ACAA:: 50 PUSH EAX
::0042ACAB:: C745 EC 00000000 MOV DWORD PTR [EBP-14],0
::0042ACB2:: C745 F0 00000000 MOV DWORD PTR [EBP-10],0
::0042ACB9:: 6A 00 PUSH 0
::0042ACBB:: FF75 F0 PUSH DWORD PTR [EBP-10]
::0042ACBE:: FF75 EC PUSH DWORD PTR [EBP-14]
::0042ACC1:: 6A 01 PUSH 1
::0042ACC3:: 8D45 FC LEA EAX,[EBP-4]
::0042ACC6:: 50 PUSH EAX
::0042ACC7:: 68 10049B00 PUSH 9B0410
::0042ACCC:: 8B0424 MOV EAX,[ESP]
::0042ACCF:: 8B00 MOV EAX,[EAX]
::0042ACD1:: 8B00 MOV EAX,[EAX]
::0042ACD3:: FF50 10 CALL [EAX+10]
::0042ACD6:: 8945 E8 MOV [EBP-18],EAX
::0042ACD9:: 8B5D FC MOV EBX,[EBP-4]
::0042ACDC:: 85DB TEST EBX,EBX
::0042ACDE:: 74 09 JE SHORT 0042ACE9
::0042ACE0:: 53 PUSH EBX
::0042ACE1:: E8 D96E0000 CALL 00431BBF 销毁从堆上分配到的内存(调用8号服务)
::0042ACE6:: 83C4 04 ADD ESP,4
::0042ACE9:: 8B5D F4 MOV EBX,[EBP-C]
::0042ACEC:: 85DB TEST EBX,EBX
::0042ACEE:: 74 09 JE SHORT 0042ACF9
::0042ACF0:: 53 PUSH EBX
::0042ACF1:: E8 C96E0000 CALL 00431BBF 销毁从堆上分配到的内存(调用8号服务)
::0042ACF6:: 83C4 04 ADD ESP,4
::0042ACF9:: 8B5D F8 MOV EBX,[EBP-8]
::0042ACFC:: 85DB TEST EBX,EBX
::0042ACFE:: 74 09 JE SHORT 0042AD09
::0042AD00:: 53 PUSH EBX
::0042AD01:: E8 B96E0000 CALL 00431BBF 销毁从堆上分配到的内存(调用8号服务)
::0042AD06:: 83C4 04 ADD ESP,4
::0042AD09:: 837D E8 00 CMP DWORD PTR [EBP-18],0
::0042AD0D:: 0F84 3B000000 JE 0042AD4E
::0042AD13:: 68 04000080 PUSH 80000004 文本型(基本数据类型)
::0042AD18:: 6A 00 PUSH 0
::0042AD1A:: 68 7A314000 PUSH 40317A 牛逼(常量)
::0042AD1F:: 68 01030080 PUSH 80000301 整数型(基本数据类型)
::0042AD24:: 6A 00 PUSH 0
::0042AD26:: 68 40000000 PUSH 40
::0042AD2B:: 68 04000080 PUSH 80000004 文本型(基本数据类型)
::0042AD30:: 6A 00 PUSH 0
::0042AD32:: 68 7F314000 PUSH 40317F 恭喜!破解成功!有能力点写个注册机吧!(常量)
::0042AD37:: 68 03000000 PUSH 3
::0042AD3C:: BB 00030000 MOV EBX,300 信息框(系统核心支持库)
::0042AD41:: E8 7F6E0000 CALL 00431BC5 调用核心支持库命令(调用3号服务)
::0042AD46:: 83C4 28 ADD ESP,28
::0042AD49:: E9 36000000 JMP 0042AD84
::0042AD4E:: 68 04000080 PUSH 80000004 文本型(基本数据类型)
::0042AD53:: 6A 00 PUSH 0
::0042AD55:: 68 A6314000 PUSH 4031A6 加油啊(常量)
::0042AD5A:: 68 01030080 PUSH 80000301 整数型(基本数据类型)
::0042AD5F:: 6A 00 PUSH 0
::0042AD61:: 68 10000000 PUSH 10
::0042AD66:: 68 04000080 PUSH 80000004 文本型(基本数据类型)
::0042AD6B:: 6A 00 PUSH 0
::0042AD6D:: 68 AD314000 PUSH 4031AD 继续努力吧!(常量)
::0042AD72:: 68 03000000 PUSH 3
::0042AD77:: BB 00030000 MOV EBX,300 信息框(系统核心支持库)
::0042AD7C:: E8 446E0000 CALL 00431BC5 调用核心支持库命令(调用3号服务)
::0042AD81:: 83C4 28 ADD ESP,28
::0042AD84:: 8BE5 MOV ESP,EBP
::0042AD86:: 5D POP EBP
::0042AD87:: C3 RETN
|
能力值:
( LV6,RANK:90 )
|
-
-
3 楼
CuteSnail
BA4E9B74504
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
⊙﹏⊙b汗
楼上的 仁兄 分析的
真牛X
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
00430C78 83C4 10 add esp, 10 ; 在栈中抛去空闲空间,大小为10字节(如EAX为双字,4字节) 00430C7B 8945 FC mov dword ptr [ebp-4], eax 00430C7E 6A FF push -1 ; 0xFFFFFFFF进栈 00430C80 6A 08 push 8 ; 0x8进栈 00430C82 68 E4030116 push 160103E4 ; 0x160103E4进栈 00430C87 68 01000152 push 52010001 ; 0x52010001进栈 00430C8C E8 4C6F0000 call 00437BDD ; 程序内部调用函数 10029627 00430C91 83C4 10 add esp, 10 ; 在栈中抛去空闲空间,大小为10字节(如EAX为双字,4字节) 00430C94 8945 F8 mov dword ptr [ebp-8], eax 00430C97 6A 01 push 1 ; 0x1进栈 00430C99 8D45 F8 lea eax, dword ptr [ebp-8] 00430C9C 50 push eax ; 0x12F48C进栈 00430C9D 6A 01 push 1 ; 0x1进栈 00430C9F B8 73914000 mov eax, 00409173 ; ASCII "linked" 00430CA4 8945 F4 mov dword ptr [ebp-C], eax 00430CA7 8D45 F4 lea eax, dword ptr [ebp-C] 00430CAA 50 push eax ; 0x12F488进栈 00430CAB C745 EC 0000000>mov dword ptr [ebp-14], 0 00430CB2 C745 F0 0000000>mov dword ptr [ebp-10], 0 00430CB9 6A 00 push 0 ; 0x0进栈 00430CBB FF75 F0 push dword ptr [ebp-10] 00430CBE FF75 EC push dword ptr [ebp-14] 00430CC1 6A 01 push 1 ; 0x1进栈 00430CC3 8D45 FC lea eax, dword ptr [ebp-4] 00430CC6 50 push eax ; 0x12F490进栈 00430CC7 68 D004DC00 push 0DC04D0 ; 0xDC04D0进栈 00430CCC 8B0424 mov eax, dword ptr [esp] 00430CCF 8B00 mov eax, dword ptr [eax] 00430CD1 8B00 mov eax, dword ptr [eax] 00430CD3 FF50 10 call dword ptr [eax+10] 00430CD6 8945 E8 mov dword ptr [ebp-18], eax 00430CD9 8B5D FC mov ebx, dword ptr [ebp-4] 00430CDC 85DB test ebx, ebx ; ZF=0 //0x1C8B18&0x1C8B18=0x1C8B18 00430CDE 74 09 je short 00430CE9 ; 不跳 //ZF=0;只有相等时,才跳 00430CE0 53 push ebx ; 0x1C8B18进栈 00430CE1 E8 D96E0000 call 00437BBF ; 计算linked,不知道为啥要计算这个。。 00430CE6 83C4 04 add esp, 4 ; 在栈中抛去空闲空间,大小为4字节(如EAX为双字,4字节) 00430CE9 8B5D F4 mov ebx, dword ptr [ebp-C] 00430CEC 85DB test ebx, ebx ; ZF=0 //0x409173&0x409173=0x409173 00430CEE 74 09 je short 00430CF9 ; 不跳 //ZF=0;只有相等时,才跳 00430CF0 53 push ebx ; 0x409173进栈 00430CF1 E8 C96E0000 call 00437BBF ; call 计算用户名 00430CF6 83C4 04 add esp, 4 ; 在栈中抛去空闲空间,大小为4字节(如EAX为双字,4字节) 00430CF9 8B5D F8 mov ebx, dword ptr [ebp-8] 00430CFC 85DB test ebx, ebx ; ZF=0 //0x1C8948&0x1C8948=0x1C8948 00430CFE 74 09 je short 00430D09 ; 不跳 //ZF=0;只有相等时,才跳 00430D00 53 push ebx ; 0x1C8948进栈 00430D01 E8 B96E0000 call 00437BBF ; call 计算假码。。。 00430D06 83C4 04 add esp, 4 ; 在栈中抛去空闲空间,大小为4字节(如EAX为双字,4字节) 00430D09 837D E8 00 cmp dword ptr [ebp-18], 0 00430D0D 0F84 3B000000 je 00430D4E ; 关键跳 00430D13 68 04000080 push 80000004 00430D18 6A 00 push 0 00430D1A 68 7A914000 push 0040917A ; ASCII "牛逼" 00430D1F 68 01030080 push 80000301 00430D24 6A 00 push 0 00430D26 68 40000000 push 40 00430D2B 68 04000080 push 80000004 00430D30 6A 00 push 0 00430D32 68 7F914000 push 0040917F 00430D37 68 03000000 push 3 00430D3C BB 00030000 mov ebx, 300 00430D41 E8 7F6E0000 call 00437BC5
100297CA 55 push ebp ; 0x12F494进栈 100297CB 8BEC mov ebp, esp ; EBP=0x12F470 100297CD 837D 08 00 cmp dword ptr [ebp+8], 0 100297D1 74 25 je short 100297F8 ; 不跳 //ZF=0;只有相等时,才跳 100297D3 8B45 08 mov eax, dword ptr [ebp+8] 100297D6 50 push eax ; 0x1C8948进栈 100297D7 B9 98CF0E10 mov ecx, 100ECF98 ; ECX=0x100ECF98 100297DC E8 1F090300 call 1005A100 ; 程序内部调用函数 跟进1005A100 100297E1 85C0 test eax, eax ; ZF=1 //0x0&0x0=0 100297E3 75 13 jnz short 100297F8 ; 不跳 //ZF=1;当比较结果是不等于时,才跳 100297E5 8B4D 08 mov ecx, dword ptr [ebp+8] 100297E8 51 push ecx ; 0x1C8948进栈 100297E9 6A 00 push 0 ; 0x0进栈 100297EB 8B15 24D40E10 mov edx, dword ptr [100ED424] 100297F1 52 push edx ; 0x140000进栈 (unicode字符串:"è") 100297F2 FF15 D0330C10 call dword ptr [<&KERNEL32.HeapFree>] ; ntdll.RtlFreeHeap 100297F8 5D pop ebp ; EBP=0x12F494 100297F9 C3 retn ; ____函数返回处____retn 100297FA 55 push ebp 100297FB 8BEC mov ebp, esp 100297FD 8B45 08 mov eax, dword ptr [ebp+8] 10029800 50 push eax 10029801 B9 98CF0E10 mov ecx, 100ECF98 10029806 E8 04F5FFFF call 10028D0F 1002980B 5D pop ebp 1002980C C2 0400 retn 4
1005A100 8B91 14020000 mov edx, dword ptr [ecx+214] 1005A106 8B81 14020000 mov eax, dword ptr [ecx+214] 1005A10C C1EA 03 shr edx, 3 ; EDX=0x1 //0x8>>0x3 移出的数据进入标志位CF 1005A10F 85C0 test eax, eax ; ZF=0 //0x8&0x8=0x8 1005A111 75 04 jnz short 1005A117 ; 跳到1005A117 //ZF=0 1005A113 33C0 xor eax, eax 1005A115 EB 06 jmp short 1005A11D 1005A117 8B81 0C020000 mov eax, dword ptr [ecx+20C] 1005A11D 33C9 xor ecx, ecx ; ECX=0,CF=0 //自身xor运算结果为0,CF=0 1005A11F 56 push esi ; 0x1BFDA7进栈 1005A120 85D2 test edx, edx ; ZF=0 //0x1&0x1=0x1 1005A122 7E 15 jle short 1005A139 ; 不跳 //ZF=0;当比较结果是小于或等于时,才跳 1005A124 8B7424 08 mov esi, dword ptr [esp+8] 1005A128 3B30 cmp esi, dword ptr [eax] 1005A12A 72 05 jb short 1005A131 ; 不跳 //当比较结果是小于时,才跳 1005A12C 3B70 04 cmp esi, dword ptr [eax+4] 1005A12F 72 0E jb short 1005A13F ; 跳到1005A13F //ZF=0,CF=1 1005A131 83C0 08 add eax, 8 ; EAX=0x100ED6FC //EAX=0x100ED6F4+0x8 1005A134 41 inc ecx ; ECX=(0x0)++ 1005A135 3BCA cmp ecx, edx ; ZF=1 //ECX=0x1,EDX=0x1 1005A137 ^ 7C EF jl short 1005A128 ; 不跳 //ZF=0,当比较结果是小于时,才跳 1005A139 33C0 xor eax, eax ; EAX=0,CF=0 //自身xor运算结果为0,CF=0 1005A13B 5E pop esi ; ESI=0x1BFDA7 1005A13C C2 0400 retn 4 ; __函数返回处___地址出栈后再加0x4 1005A13F 8B40 04 mov eax, dword ptr [eax+4] 1005A142 5E pop esi ; ESI=0x1BFDA7 1005A143 C2 0400 retn 4 ; __函数返回处___地址出栈后再加0x4
研究了半天算法还没搞懂。。。。真晕。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
楼上努力啊!!!
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
还加了壳啊..
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
牛X
我汗 还有点难呀
|
能力值:
( LV6,RANK:90 )
|
-
-
9 楼
keheng 兄弟,你已经知道决定跳转的是:
00430D09 837D E8 00 cmp dword ptr [ebp-18], 0
那么 dword ptr [ebp-18] 的值又是从哪里来的呐?
是从:
00430CD6 8945 E8 mov dword ptr [ebp-18], eax
来的!是eax的结果决定的!
那决定eax的是哪个语句哪?自然是它上面的那句:
00430CD3 FF50 10 call dword ptr [eax+10]
为什么不F7跟进去看看呐??呵呵,好运~
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
[QUOTE=CuteSnail;648776]keheng 兄弟,你已经知道决定跳转的是:
00430D09 837D E8 00 cmp dword ptr [ebp-18], 0
那么 dword ptr [ebp-18] 的值又是从哪里来的呐?
是从:
00430CD6 8945 E8...[/QUOTE]
哦,原来重要在这里。谢谢指点。。。。。。。。。。
keheng
8E50419F479
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
这个cm里面写了很多的垃圾指令来整人的。。。。真正计算注册码的没多少。。。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
脱壳还是蛮绕的 顺利搞定了 呵呵
可惜本人菜鸟一只 只会爆破。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
keheng,请问这个如何脱壳,我找到了oep,好像不能dump,不知道怎么回事?
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
5楼的步骤分析的很详细 呵呵
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
来学习一下!!
|
能力值:
( LV4,RANK:50 )
|
-
-
16 楼
这个脱壳其实很简单,OD载入
00401000 >/$ 68 94F94700 push 0047F994
00401005 |? E8 01000000 call 0040100B ;F7跟进
0040100A |? C3 retn
0040100B |. C3 retn
0040100C |? 60 pushad
0040100D |. 8B7424 24 mov esi, dword ptr [esp+24]
00401011 |? 8B7C24 28 mov edi, dword ptr [esp+28]
00401015 |? FC cld
F8单步走到这里。。。。
0047F9A0 FFE0 jmp eax
0047F9A2 B1 15 mov cl, 15
0047F9A4 0000 add byte ptr [eax], al
0047F9A6 60 pushad
0047F9A7 E8 00000000 call 0047F9AC ;用ESP定律
0047F9AC 5E pop esi
0047F9AD 83EE 0A sub esi, 0A
0047F9B0 8B06 mov eax, dword ptr [esi]
0047F9B2 03C2 add eax, edx
0047F9B4 8B08 mov ecx, dword ptr [eax]
0047F9B6 894E F3 mov dword ptr [esi-D], ecx
0047F9B9 83EE 0F sub esi, 0F
0047F9BC 56 push esi
用ESP定律(这个不用说了吧。。。。。。。。。。),运行到达
0047F994 B8 61380000 mov eax, 3861 ;f8单步
0047F999 BA 00004000 mov edx, 00400000
0047F99E 03C2 add eax, edx
0047F9A0 FFE0 jmp eax 跟至OEP
loadpe脱壳。。。。。修复
脱壳完成后会提示Invalid data in th file!
用winhex载入原文件,光标从下到上找到全部为00的地方
把这个数据复制到刚修复的文件就OK了。
|
能力值:
( LV4,RANK:50 )
|
-
-
17 楼
详细是详细,可惜是错的。。。。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
脱壳完成后会提示Invalid data in th file!
用winhex载入原文件,光标从下到上找到全部为00的地方
把这个数据复制到刚修复的文件就OK了。
=========================
只能做到这一步,提示Invalid data in th file!
怎么用WinHex来修复。能详细点吗?
keheng!
|
能力值:
( LV4,RANK:50 )
|
-
-
19 楼
建议多看看脱壳教程。。。。。俺也是菜鸟一个。。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
明白,这是附加数据
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
多谢,keheng
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
我的PEID查不出,什么都没找到 [Overlay] *
Exeinfo PE就查出是KByS 0.28 beta EXE ( shoooo ) china 2006.05.23 *ACM - Overlay : A5B79A... Nothing discovered
我是没见过这壳,没想,OD载入后,几下到了00430D0D /0F84 3B000000 je 00430D4E 没多想,je改jne,一试,成功了。
|
能力值:
( LV6,RANK:90 )
|
-
-
23 楼
呵呵,keheng的桌面够简洁! 最后施工图。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
请高手指点一下算法。。在里面绕来绕去,头大ing。。
|
能力值:
( LV4,RANK:50 )
|
-
-
25 楼
这只是屏幕的一角。。。。。。。。。。。
那是朋友要我给他发的文件
|
|
|