|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 风扫地 于 2011-10-24 20:51 编辑
小弟是反汇编的初学者,现在先调些简单的。,慢慢的加深难度。希望有共同兴趣的童鞋一起学习。。。希望各位大虾们,牛牛们能多多指教,互相交流。小弟顿首。
这次是为了了解 C语言的数组寻址原理。很基础的东东。
需要还原成C源代码的EXE文件如下:
还原源代码练习_02.zip
(10.43 KB, 下载次数: 3)
生成本EXE文件的C语言语言代码 编译环境 VC6 debug版本。。
源代码_02.zip
(388 Bytes, 下载次数: 2)
需要还原的关键代码:
- 00401000 55 push ebp
- 00401001 |. 8BEC mov ebp,esp
- 00401003 |. 83EC 24 sub esp,0x24
- 00401006 |. 8D45 DC lea eax,[local.9]
- 00401009 |. 50 push eax
- 0040100A |. 8D4D E8 lea ecx,[local.6]
- 0040100D |. 51 push ecx
- 0040100E |. 8D55 F4 lea edx,[local.3]
- 00401011 |. 52 push edx
- 00401012 |. E8 07000000 call 1.0040101E
- 00401017 |. 83C4 0C add esp,0xC
- 0040101A |. 8BE5 mov esp,ebp
- 0040101C |. 5D pop ebp
- 0040101D \. C3 retn
- 0040101E /55 push ebp
- 0040101F |. 8BEC mov ebp,esp
- 00401021 |. 83EC 08 sub esp,0x8
- 00401024 |. C745 FC 00000>mov [local.1],0x0
- 0040102B |. EB 09 jmp X1.00401036
- 0040102D |> 8B45 FC /mov eax,[local.1]
- 00401030 |. 83C0 01 |add eax,0x1
- 00401033 |. 8945 FC |mov [local.1],eax
- 00401036 |> 837D FC 03 cmp [local.1],0x3
- 0040103A |. 0F8D 83000000 |jge 1.004010C3
- 00401040 |. C745 F8 00000>|mov [local.2],0x0
- 00401047 |. EB 09 |jmp X1.00401052
- 00401049 |> 8B4D F8 |/mov ecx,[local.2]
- 0040104C |. 83C1 01 ||add ecx,0x1
- 0040104F |. 894D F8 ||mov [local.2],ecx
- 00401052 |> 837D F8 03 | cmp [local.2],0x3
- 00401056 |. 7D 66 ||jge X1.004010BE
- 00401058 |. 8B55 FC ||mov edx,[local.1]
- 0040105B |. 6BD2 03 ||imul edx,edx,0x3
- 0040105E |. 8B45 08 ||mov eax,[arg.1]
- 00401061 |. 0FBE0C10 ||movsx ecx,byte ptr ds:[eax+edx]
- 00401065 |. 8B55 0C ||mov edx,[arg.2]
- 00401068 |. 0355 F8 ||add edx,[local.2]
- 0040106B |. 0FBE02 ||movsx eax,byte ptr ds:[edx]
- 0040106E |. 0FAFC8 ||imul ecx,eax
- 00401071 |. 8B55 FC ||mov edx,[local.1]
- 00401074 |. 6BD2 03 ||imul edx,edx,0x3
- 00401077 |. 8B45 08 ||mov eax,[arg.1]
- 0040107A |. 0FBE5410 01 ||movsx edx,byte ptr ds:[eax+edx+0x1]
- 0040107F |. 8B45 0C ||mov eax,[arg.2]
- 00401082 |. 0345 F8 ||add eax,[local.2]
- 00401085 |. 0FBE40 03 ||movsx eax,byte ptr ds:[eax+0x3]
- 00401089 |. 0FAFD0 ||imul edx,eax
- 0040108C |. 03CA ||add ecx,edx
- 0040108E |. 8B55 FC ||mov edx,[local.1]
- 00401091 |. 6BD2 03 ||imul edx,edx,0x3
- 00401094 |. 8B45 08 ||mov eax,[arg.1]
- 00401097 |. 0FBE5410 02 ||movsx edx,byte ptr ds:[eax+edx+0x2]
- 0040109C |. 8B45 0C ||mov eax,[arg.2]
- 0040109F |. 0345 F8 ||add eax,[local.2]
- 004010A2 |. 0FBE40 06 ||movsx eax,byte ptr ds:[eax+0x6]
- 004010A6 |. 0FAFD0 ||imul edx,eax
- 004010A9 |. 03CA ||add ecx,edx
- 004010AB |. 8B55 FC ||mov edx,[local.1]
- 004010AE |. 6BD2 03 ||imul edx,edx,0x3
- 004010B1 |. 8B45 10 ||mov eax,[arg.3]
- 004010B4 |. 03C2 ||add eax,edx
- 004010B6 |. 8B55 F8 ||mov edx,[local.2]
- 004010B9 |. 880C10 ||mov byte ptr ds:[eax+edx],cl
- 004010BC |.^ EB 8B |\jmp X1.00401049
- 004010BE |>^ E9 6AFFFFFF \jmp 1.0040102D
- 004010C3 |> 8BE5 mov esp,ebp
- 004010C5 |. 5D pop ebp
- 004010C6 \. C3 retn
复制代码
个人 逆向的结果 以及调试笔记:
我调试这个软件时的笔记和心得。。
02_分析笔记.zip
(34.48 KB, 下载次数: 3)
。。
个人的困惑是在生成EXE的源代码中。明明只申请了。char a[3][3] b[3][3] c[3][3] 一共27个单元的空间,在汇编代码中为什么要sub esp, 0x24 (36个空间) 在压栈的时候为什么要相隔0xc (12)个单元压栈。还是说我的在申请局部变量的时候有理解错误。。
在我笔记里面有错误的地方,希望大家多多指正。
这次还原大概花了1个多小时。我要加加油 了。哈哈~.~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~更新下。。。
检查了下笔记,发现一个很严重的错误。。。
那就是C语言的参数压栈顺序是自左向右的。。我的注释里面刚好是相反的。。
|
|