鱼C论坛

 找回密码
 立即注册
查看: 2783|回复: 4

[技术交流] 还原源码练习_02 By 风扫地

[复制链接]
发表于 2011-10-24 00:33:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 风扫地 于 2011-10-24 20:51 编辑

小弟是反汇编的初学者,现在先调些简单的。,慢慢的加深难度。希望有共同兴趣的童鞋一起学习。。。希望各位大虾们,牛牛们能多多指教,互相交流。小弟顿首。
这次是为了了解 C语言的数组寻址原理。很基础的东东。

需要还原成C源代码的EXE文件如下: 还原源代码练习_02.zip (10.43 KB, 下载次数: 3)
生成本EXE文件的C语言语言代码  编译环境  VC6  debug版本。。
源代码_02.zip (388 Bytes, 下载次数: 2)

需要还原的关键代码:

  1. 00401000  55            push ebp
  2. 00401001  |.  8BEC          mov ebp,esp
  3. 00401003  |.  83EC 24       sub esp,0x24
  4. 00401006  |.  8D45 DC       lea eax,[local.9]
  5. 00401009  |.  50            push eax
  6. 0040100A  |.  8D4D E8       lea ecx,[local.6]
  7. 0040100D  |.  51            push ecx
  8. 0040100E  |.  8D55 F4       lea edx,[local.3]
  9. 00401011  |.  52            push edx
  10. 00401012  |.  E8 07000000   call 1.0040101E
  11. 00401017  |.  83C4 0C       add esp,0xC
  12. 0040101A  |.  8BE5          mov esp,ebp
  13. 0040101C  |.  5D            pop ebp
  14. 0040101D  \.  C3            retn



  15. 0040101E  /55            push ebp
  16. 0040101F  |.  8BEC          mov ebp,esp
  17. 00401021  |.  83EC 08       sub esp,0x8
  18. 00401024  |.  C745 FC 00000>mov [local.1],0x0
  19. 0040102B  |.  EB 09         jmp X1.00401036
  20. 0040102D  |>  8B45 FC       /mov eax,[local.1]
  21. 00401030  |.  83C0 01       |add eax,0x1
  22. 00401033  |.  8945 FC       |mov [local.1],eax
  23. 00401036  |>  837D FC 03     cmp [local.1],0x3
  24. 0040103A  |.  0F8D 83000000 |jge 1.004010C3
  25. 00401040  |.  C745 F8 00000>|mov [local.2],0x0
  26. 00401047  |.  EB 09         |jmp X1.00401052
  27. 00401049  |>  8B4D F8       |/mov ecx,[local.2]
  28. 0040104C  |.  83C1 01       ||add ecx,0x1
  29. 0040104F  |.  894D F8       ||mov [local.2],ecx
  30. 00401052  |>  837D F8 03    | cmp [local.2],0x3
  31. 00401056  |.  7D 66         ||jge X1.004010BE
  32. 00401058  |.  8B55 FC       ||mov edx,[local.1]
  33. 0040105B  |.  6BD2 03       ||imul edx,edx,0x3
  34. 0040105E  |.  8B45 08       ||mov eax,[arg.1]
  35. 00401061  |.  0FBE0C10      ||movsx ecx,byte ptr ds:[eax+edx]
  36. 00401065  |.  8B55 0C       ||mov edx,[arg.2]
  37. 00401068  |.  0355 F8       ||add edx,[local.2]
  38. 0040106B  |.  0FBE02        ||movsx eax,byte ptr ds:[edx]
  39. 0040106E  |.  0FAFC8        ||imul ecx,eax
  40. 00401071  |.  8B55 FC       ||mov edx,[local.1]
  41. 00401074  |.  6BD2 03       ||imul edx,edx,0x3
  42. 00401077  |.  8B45 08       ||mov eax,[arg.1]
  43. 0040107A  |.  0FBE5410 01   ||movsx edx,byte ptr ds:[eax+edx+0x1]
  44. 0040107F  |.  8B45 0C       ||mov eax,[arg.2]
  45. 00401082  |.  0345 F8       ||add eax,[local.2]
  46. 00401085  |.  0FBE40 03     ||movsx eax,byte ptr ds:[eax+0x3]
  47. 00401089  |.  0FAFD0        ||imul edx,eax
  48. 0040108C  |.  03CA          ||add ecx,edx
  49. 0040108E  |.  8B55 FC       ||mov edx,[local.1]
  50. 00401091  |.  6BD2 03       ||imul edx,edx,0x3
  51. 00401094  |.  8B45 08       ||mov eax,[arg.1]
  52. 00401097  |.  0FBE5410 02   ||movsx edx,byte ptr ds:[eax+edx+0x2]
  53. 0040109C  |.  8B45 0C       ||mov eax,[arg.2]
  54. 0040109F  |.  0345 F8       ||add eax,[local.2]
  55. 004010A2  |.  0FBE40 06     ||movsx eax,byte ptr ds:[eax+0x6]
  56. 004010A6  |.  0FAFD0        ||imul edx,eax
  57. 004010A9  |.  03CA          ||add ecx,edx
  58. 004010AB  |.  8B55 FC       ||mov edx,[local.1]
  59. 004010AE  |.  6BD2 03       ||imul edx,edx,0x3
  60. 004010B1  |.  8B45 10       ||mov eax,[arg.3]
  61. 004010B4  |.  03C2          ||add eax,edx
  62. 004010B6  |.  8B55 F8       ||mov edx,[local.2]
  63. 004010B9  |.  880C10        ||mov byte ptr ds:[eax+edx],cl
  64. 004010BC  |.^ EB 8B         |\jmp X1.00401049
  65. 004010BE  |>^ E9 6AFFFFFF   \jmp 1.0040102D
  66. 004010C3  |>  8BE5          mov esp,ebp
  67. 004010C5  |.  5D            pop ebp
  68. 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语言的参数压栈顺序是自左向右的。。我的注释里面刚好是相反的。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-24 00:40:56 | 显示全部楼层
:o什么东东
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-24 00:57:05 | 显示全部楼层
编辑完了。。希望大家多多指教。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-24 13:01:28 | 显示全部楼层
不会反汇编- -...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-24 20:45:36 | 显示全部楼层
更新下。。。发现一个错误。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 18:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表