首页
社区
课程
招聘
[原创]部分关键点注释[Aker版主修改版]无inline assemble c/c++语言实现堆栈修改,通过ret跳转到自定义函数,高手飘过
发表于: 2011-5-20 08:54 7805

[原创]部分关键点注释[Aker版主修改版]无inline assemble c/c++语言实现堆栈修改,通过ret跳转到自定义函数,高手飘过

2011-5-20 08:54
7805
前天写的。修改函数的ret控制函数流程,编译通过,VC6测试,和标准C99编译器测试通过
无警告,标准C,release通过
#include<windows.h>
void _stdcall Engine(void *Addr);
void _stdcall AddressA(void)
{
        MessageBox(NULL,"222","函数2",MB_OK);
}
void _stdcall Address(void)
{
        MessageBox(NULL,"222","函数1",MB_OK);
        Engine(AddressA);
}
void _stdcall Engine(void *Addr)     //重点照顾对象
{
    unsigned int A=2;
        unsigned int B=0;局部变量
        unsigned int *c=&A;局部变量。
        c=c+2;定位到EBP+4,EBP+4就是一个CALL函数返回地址保存的地方
        B=0xe7ED4F3A9;垃圾开始,这些是迷惑的垃圾
        A^=(unsigned int)&B;
        *(unsigned int*)c=A;
        B=(unsigned int)*(unsigned int*)c;
        *(unsigned int*)c^=*(unsigned int*)B;
        A=(unsigned int)*(unsigned int*)c;
        *(unsigned int*)c=A^B;
        B=(unsigned int)*(unsigned int*)c;
        *(unsigned int*)c=B^A;
        B=*(unsigned int*)c^A;
        A=B^A;
        *(unsigned int*)c=*(unsigned int*)A;垃圾结束
        *(unsigned int*)c=(unsigned int)Addr;这个句关键,现在C是指向函数的返回地址了,函数地址,保存到这个函数的返回地址,实现函数中转
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
        MessageBox(NULL,"222","函数1",MB_OK);
        Engine(Address);
        return 0;
}

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
完全不懂,只能膜拜。
2011-5-20 10:04
0
雪    币: 216
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Debug 可以, Release  Engine 函数功能不能实现。。
2011-5-20 10:27
0
雪    币: 308
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
楼主的这段代码貌似很复杂呀
2011-5-20 10:45
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
5
要是能稍微注释一下就完美了···
2011-5-20 11:45
0
雪    币: 1760
活跃值: (1616)
能力值: ( LV12,RANK:222 )
在线值:
发帖
回帖
粉丝
6
请问这个有什么用?
2011-5-20 12:11
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
能否再加上把参数也传过去的?
2011-5-20 12:49
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
8
参数的现在没考虑,过两天放上加参数的
2011-5-20 12:54
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
实际上也是相当的复杂,很难看懂。
2011-5-20 18:55
0
雪    币: 287
活跃值: (578)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
无法学习,只能膜拜
2011-5-20 20:28
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
11
黑哥,。。。今天干什么去了,不上QQ
2011-5-20 23:41
0
雪    币: 154
活跃值: (550)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
12
又见邓韬发帖啊,无法学习,只能膜拜
2011-5-21 00:21
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
13
别嘲笑小弟了
2011-5-21 09:55
0
雪    币: 58
活跃值: (2426)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
奇怪,为什么在我的电脑上编译有warning。
debug下,可以出现3个messagebox,但退出时出错。
release时,只出现一个messagebox
--------------------
平台windows xp sp3, vc6
2011-5-26 14:32
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
15
表示不明白写这个有什么意义~~~
2011-5-26 16:56
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
16
娱乐娱乐,一定要有意义才发?
2011-5-28 08:17
0
游客
登录 | 注册 方可回帖
返回
//