能力值:
( LV2,RANK:10 )
|
-
-
151 楼
呵呵
楼主啊
我现在能看懂了
不过,我反汇编出来的有很多不一样啊
比如说:那个停的地址之类的拉
我都把那个<加密和解密>背过了
可是,现实就是比理论残酷啊
有很多的知识需要我掌握,能指点一下不?
看汇编是没有问题
就是那个什么工具太多了,HEX什么的
不能加指令啊
比如 nop nop 不能加
|
能力值:
( LV2,RANK:10 )
|
-
-
152 楼
00401368 >/$ 55 push ebp ; (initial cpu selection)
00401369 >|. 8BEC mov ebp, esp ; 保存指针
0040136B |. 6A FF push -1 ; 送最大树
0040136D |. 68 E8404000 push 004040E8 ; 送地址
00401372 |. 68 9C1E4000 push 00401E9C ; SE handler installation
00401377 |. 64:A1 0000000>mov eax, dword ptr fs:[0] ; 送参数
0040137D |. 50 push eax ; 送数
0040137E |. 64:8925 00000>mov dword ptr fs:[0], esp ; 送地址
00401385 |. 83EC 58 sub esp, 58 ; 调整指针
00401388 |. 53 push ebx ; 堆栈保护
00401389 |. 56 push esi
0040138A |. 57 push edi
0040138B |. 8965 E8 mov dword ptr [ebp-18], esp ; 堆栈保护
0040138E |. FF15 44404000 call dword ptr [<&KERNEL32.GetVersion>] ; kernel32.GetVersion ;一般都得得到版本信息,
|
能力值:
( LV2,RANK:10 )
|
-
-
153 楼
004013C2 |. E8 A1090000 call 00401D68 ; 调用初始化函数
00401D68 /$ 33C0 xor eax, eax ; A寄存器清零
00401D6A |. 6A 00 push 0 ; /参数1最大值
00401D6C |. 394424 08 cmp dword ptr [esp+8], eax ; |比较EAX寄存器,影响正负标志
00401D70 |. 68 00100000 push 1000 ; |InitialSize = 1000 (4096.)
00401D75 |. 0F94C0 sete al ; |设置初始化大小
00401D78 |. 50 push eax ; |Flags
00401D79 |. FF15 80404000 call dword ptr [<&KERNEL32.HeapCreate>] ; \HeapCreate
00401D7F |. 85C0 test eax, eax
00401D81 |. A3 08594000 mov dword ptr [405908], eax
00401D86 74 15 je short 00401D9D
00401D88 |. E8 F80C0000 call 00402A85
00401D8D |. 85C0 test eax, eax ; eax寄存器是 零吗?
00401D8F |. 75 0F jnz short 00401DA0 ; 不是零的话就跳
00401D91 |. FF35 08594000 push dword ptr [405908] ; /hHeap = NULL
00401D97 |. FF15 7C404000 call dword ptr [<&KERNEL32.HeapDestroy>] ; \HeapDestroy
00401D9D |> 33C0 xor eax, eax
00401D9F |. C3 retn
00401DA0 |> 6A 01 push 1 ; 对A寄存器返回1
00401DA2 |. 58 pop eax
00401DA3 \. C3 retn ; 返回
|
能力值:
( LV2,RANK:10 )
|
-
-
154 楼
00401D88 |. E8 F80C0000 call 00402A85
00402A85 /$ 68 40010000 push 140 ; /HeapSize = 140 (320.)
00402A8A |. 6A 00 push 0 ; |Flags = 0
00402A8C |. FF35 08594000 push dword ptr [405908] ; |hHeap = 003C0000
00402A92 |. FF15 2C404000 call dword ptr [<&KERNEL32.HeapAlloc>] ; \HeapAlloc
00402A98 |. 85C0 test eax, eax
00402A9A |. A3 D8564000 mov dword ptr [4056D8], eax
00402A9F |. 75 01 jnz short 00402AA2
00402AA1 |. C3 retn
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
155 楼
非常感谢!很受用!!!刚开始学,所以很多不懂,这个刚刚好
|
能力值:
( LV2,RANK:10 )
|
-
-
156 楼
收藏,学习,谢谢!!
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
157 楼
多谢楼主,照着学了不少东西
|
能力值:
( LV2,RANK:10 )
|
-
-
158 楼
怎么我这里执行的时候对不上号啊
77E16544 > 55 PUSH EBP <---停在这里
77E16545 8BEC MOV EBP,ESP
77E16547 51 PUSH ECX
77E16548 833D 1893E477 00 CMP DWORD PTR DS:[77E49318],0
77E1654F 0F85 EA220100 JNZ USER32.77E2883F
77E16555 6A 00 PUSH 0
77E16557 FF75 14 PUSH DWORD PTR SS:[EBP+14]
77E1655A FF75 10 PUSH DWORD PTR SS:[EBP+10]
77E1655D FF75 0C PUSH DWORD PTR SS:[EBP+C]
77E16560 FF75 08 PUSH DWORD PTR SS:[EBP+8]
77E16563 E8 04000000 CALL USER32.MessageBoxExA
77E16568 C9 LEAVE
77E16569 C2 1000 RETN 10
77E1656C > 55 PUSH EBP
我这里是
7E45058C 55 push ebp
7E45058D 8BEC mov ebp,esp
7E45058F 833D BC04477E 00 cmp dword ptr ds:[7E4704BC],0
7E450596 74 24 je short USER32.7E4505BC
7E450598 64:A1 18000000 mov eax,dword ptr fs:[18]
7E45059E 6A 00 push 0
7E4505A0 FF70 24 push dword ptr ds:[eax+24]
7E4505A3 68 240B477E push USER32.7E470B24
7E4505A8 FF15 C812417E call dword ptr ds:[<&KERNEL32.InterlockedC>; kernel32.InterlockedCompareExchange
7E4505AE 85C0 test eax,eax
7E4505B0 75 0A jnz short USER32.7E4505BC
7E4505B2 C705 200B477E 01000>mov dword ptr ds:[7E470B20],1
7E4505BC 6A 00 push 0
7E4505BE FF75 14 push dword ptr ss:[ebp+14]
7E4505C1 FF75 10 push dword ptr ss:[ebp+10]
7E4505C4 FF75 0C push dword ptr ss:[ebp+C]
7E4505C7 FF75 08 push dword ptr ss:[ebp+8]
7E4505CA E8 2D000000 call USER32.MessageBoxExA
7E4505CF 5D pop ebp
7E4505D0 C2 1000 retn 10
而且
我们要返回 crackme 的领空里,有几个方法
1. 不停接 F8 ,一步一步地执行直至程序遇上 retn ,这是返回指令,它会带我们回去
2. 按 Ctrl + F9 ,这样 OD 会不停执行,直至遇到 retn 停下
3. 按一下返回的 retn ,再按 F4 ,程序会执行到光标所在的地方
4. 打开 OD 的 call stack window,看看我们从那里飞来,便设一个断点在那地方,之后 F9 运行
我们按一下 F2 清除断点,再按一下 77E16569 (retn) 那行,按 F4 执行到那里,再按一下 F7 进入 retn。
这里F4,直接跳出failed 对话框
|
能力值:
( LV2,RANK:10 )
|
-
-
159 楼
好东西,谢谢了,收下!
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
160 楼
非常感谢,我是菜鸟来的,多谢你的教程
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
161 楼
几年前的贴子,我今天仍然用他入门,感谢
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
162 楼
又学习了一遍.次次有收获.
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
163 楼
真的好感谢楼主!
|
能力值:
( LV9,RANK:490 )
在线值:
|
-
-
164 楼
04年的帖子被顶了起来,哈哈,好帖要顶过奥运,冲出世界
|
能力值:
( LV2,RANK:10 )
在线值:

|
-
-
165 楼
学习啊。。。。
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
166 楼
学习ING...................
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
167 楼
拿了学习。。。。
|
能力值:
( LV2,RANK:10 )
在线值:

|
-
-
168 楼
温故知新 温故知新
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
169 楼
写得太有价值了,我狂踩!
|
能力值:
( LV2,RANK:10 )
在线值:

|
-
-
170 楼
终于看明白了到00401293位置的算法部分,想通了参数压进栈的过程就很容易明白。
继续研究~
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
171 楼
哈哈,好好学习。
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
172 楼
讲的相当详细,像我这样初学起来确实不错啊
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
173 楼
非常感谢楼主,对我这样的初级学者,真是太好了
|
能力值:
( LV3,RANK:20 )
|
-
-
174 楼
00401072 /75 1B JNZ SHORT ncrackme.0040108F ; |
直接NOP掉,哈哈
只会爆破
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
175 楼
感謝分享^^!!!
|
|
|