首页
社区
课程
招聘
[旧帖] [原创]C++逆向this指针问题 0.00雪花
发表于: 2014-4-25 17:10 6309

[旧帖] [原创]C++逆向this指针问题 0.00雪花

2014-4-25 17:10
6309
我逆向一段代码
this->地址是0x00F6B764,内存里显示的是,

函数指针(list)->有很多函数地址
数据变量(类似结构体)

我怎么怎么找到这个this呢

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 217
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
没看明白主题,没逆向经验,this是每个非static得成员函数的第一个参数,隐含的
而this是对象本身吧
2014-4-25 17:13
0
雪    币: 80
活跃值: (109)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
this不是非static函数的最后一个参数吗?
2014-4-25 17:14
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
0104B764是cex,
在内存的表达是这样的

0104B764  3C 8E A8 00 00 00 01 00 00 00 00 00 01 00 00 00  <帹...........
0104B774  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0104B784  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0104B794  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0104B7A4  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0104B7B4  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0104B7C4  00 00 00 00 54 F1 07 00 00 00 00 00 00 00 2D 4E  ....T?.......-N

前4个字节是,指向类函数的指针。下面则是这个this指向的数据变量
2014-4-25 17:18
0
雪    币: 217
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
看源码的时候幻想是第一个参数。。。在运行时最后一个入栈。。。我没说好
2014-4-25 17:23
0
雪    币: 3330
活跃值: (1662)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
6
暴搜内存?以上面为例:搜索3C 8E A8 00也就是0X00A88E3C
2014-4-25 19:23
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看不懂,不过还是要顶一下LZ
2014-4-25 20:04
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
解决了,才发现很简单,先偏移算出函数地址,虚构函数表有个地址,搜索这个函数的地址,偏移上去,得到指针头地址,然后搜索指针头,就能找到函数对应的this指针
2014-4-25 20:52
0
雪    币: 80
活跃值: (109)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
stdcall之类的那些东西,没研究过。函数参数的压栈顺序
2014-4-25 22:03
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
没太看明白。。。c++菜鸟路过
2014-4-27 13:16
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
this指针是类成员函数的隐含参数。
如果是VC编译的话,this指针放在ecx中,你可以从某个类成员函数的ecx寄存器中得到这个this指针,其实就是指向当前类实例的地址。
2014-4-30 16:42
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
楼主问的是什么没看明白。
2014-4-30 17:46
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
this 指向非静态对象
2014-4-30 23:16
0
雪    币: 250
活跃值: (81)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
你可以看this指针的函数调用,一般是ecx传递参数
2014-5-8 14:32
0
雪    币: 188
活跃值: (167)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
ecx寄存器传递
2014-5-29 14:27
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
this应该是被当作参数传递的。第一个参数
2014-5-30 18:10
0
雪    币: 31
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
你可以通过修改调用约定为stdcall让this指针入栈,默认情况下通过寄存器传参
2014-5-30 18:42
0
雪    币: 31
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
两个对象去调用各自的方法fun默认传了一个this指针,用来区分不同对象的调用,
2014-5-30 18:45
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
在VC下,对于大多数情况,即用THISCALL的情况,识别THIS的关键是在函数调用过程中用ecx作为第一个参数,并且在ECX中保存了对象的首地址,换句话说,要在代码内看到这个ECX参与的寄存器相对间接访问方式,用STDCALL时,THIS指针用堆栈方式,比较难看出来,但这种情况很少
2014-6-1 09:41
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
没看懂!
2014-6-1 16:58
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
唉 不懂 顶一下吧。
好好学习。
2014-6-3 12:05
0
游客
登录 | 注册 方可回帖
返回
//