首页
社区
课程
招聘
[原创]简单C程序逆向分析,送给和我一样菜的朋友
2021-8-16 17:21 6385

[原创]简单C程序逆向分析,送给和我一样菜的朋友

2021-8-16 17:21
6385

CODE很简单:

#include <stdio.h>

#include <stdlib.h>

int  Function(int x,int y)

{

return x+y;


}


void  main()


{

int a=10;

int b=20;

Function(a,b);

printf("\na=%d,a=%x,b=%d,b=%x",a,&a,b,&b);

system("pause");

}


逆向分析记录:

CALL 00401010   此句执行把下一行地址也就是004011D8压入堆栈,并且跳到00401010继续执行

SUB ESP,8     提升堆栈0X8个地址,用于存放变量,此时的堆栈地址为ESP=0012FF84,此句执行结束以后堆栈ESP=0012FF7C

push 14        将参数0X14压栈,也就是20入栈,执行以后ESP-4,ESP=0012FF78

PUSH 0A        将参数0XA压栈,也就是10入栈,执行以后ESP-4,ESP=0012FF74

MOV DWORD PTR SS:[ESP+C],0A   将0A也就是10放入ESP+c的内存单元,不改变堆栈,此时的ESP+C=0012FF80 

MOV DWORD PTR SS:[ESP+8],14   将0X14也就是20放入ESP+8的内存单元,不改变堆栈,此时的ESP+8=0012FF7C 

CALL 00401000  调用自写函数FUn,地址为00401000,同时将下一行0040102C亚入堆栈,,执行完毕以后ESP-4=0012FF70 跳转到00401000继续执行



MOV EAX,DWORD PTR SS:[ESP+8],此句取ESP+8内存编号的值传入EAX,此时的ESP+8=0012FF78,存放的是0X14,也就是20

MOV ECX,DWORD PTR SS:[ESP+4]  同上一句一样,也将堆栈的ESP+8内存单元(0012FF74)的值0A取出来,放入ECX中

ADD EAX,ECX,此句执行以后,EAX=原有EAX+ECX=0X14+0XA=0X1E,也就是十进制的30

RETN    此句执行以后,返回到当前堆栈的栈顶指针(0040102C)继续执行,ESP+4=0012FF74


MOV ECX,DWORD PTR SS:[ESP+8] 此句执行将ESP+8的内存单元0012FF7C存放的内容0X14取出来放到ECX中

LEA EAX,DWORD PTR SS:[ESP+8]  将ESP+8的地址赋值给EAX =0012FF7C

PUSH EAX   EAX=0012FF7C入栈  ESP-4=0012FF70

MOV EAX,DWORD PTR SS:[ESP+10]    将ESP+10内存单元0012FF80的内容0XA赋值给EAX

LEA EDX,DWORD PTR SS:[ESP+10]     取ESP+10的地址 0012FF80 赋值给EDX

PUSH ECX   0X14入栈  ESP-4    ESP==0012FF6C

PUSH EDX    0012FF80入栈       ESP=0012FF68   

PUSH EAX     0XA入栈            ESP==0012FF64   


PUSH 408038   将字符串压栈 ASCII 0A,"a=%d,a=%x,"   ESP-4   0012FF60 执行以后堆栈信息( 0012FF60   00408038  ASCII 0A,"a=%d,a=%x,")

CALL 004010F6  此句将下一行0040104A压栈,ESP-4===0012FF5C     调用printf函数


PUSH 408030  压入字符串 pause  到堆栈

CALL 00401060  调用系统函数System 这就不跟了,会跟到未来

ADD ESP,28      执行完毕ESP+28=0012FF84  

RETN           返回到当前ESP中的004011DB ,执行完毕 ESP+4 =0012FF88  







                                 写在最后的话:希望论坛的各位大佬给个邀请码,还没转正呢,老是弹个临时会员的窗体,真的很不利于学习,哈哈。


阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞1
打赏
分享
最新回复 (8)
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kxzpy 2021-8-17 11:18
2
0
004011D8压入堆栈

这句话是什么意思?
在图片里,哪里可以提现?
为啥是这个地址?
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kxzpy 2021-8-17 12:12
3
0
004011D8

004011DB

?
雪    币: 299
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
QZ2019 2021-8-17 15:18
4
0
ADD ESP 0x28
栈顶就保存的返回地址
雪    币: 220
活跃值: (493)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lolikon 2021-8-17 20:49
5
0
 其实你用vs单步调试, 打开汇编窗口就行了.....
雪    币: 283
活跃值: (74)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
juckerpp 2021-8-18 01:06
6
0
蓝色的OD。。。这审美不一般呀
雪    币: 299
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
QZ2019 2021-8-18 17:28
7
0
lolikon [em_13] 其实你用vs单步调试, 打开汇编窗口就行了.....
那个跟踪效果没有OD舒服
雪    币: 299
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
QZ2019 2021-8-18 17:28
8
0
juckerpp 蓝色的OD。。。这审美不一般呀[em_13]
就喜欢蓝色
雪    币: 1453
活跃值: (14624)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
SSH山水画 3 2021-8-18 17:49
9
0
你这OD的颜色。。。我肝已经开始痛了
游客
登录 | 注册 方可回帖
返回