首页
社区
课程
招聘
未解决 [求助]菜鸟请教,请问怎么在X32dbg中调试出某全局变量所在地址? 50.00雪花
发表于: 2024-5-14 10:50 2198

未解决 [求助]菜鸟请教,请问怎么在X32dbg中调试出某全局变量所在地址? 50.00雪花

2024-5-14 10:50
2198

我请一位老师教我逆向了某程序,因为我需要获取这个程序中的某一个解密密码。
现在我已经能够在x32dbg中,发现该密码在Call XXXX后的返回值EAX中,但这个EAX的内存地址在别人电脑上运行时是不固定的,但我想直接通过读内存的方式,来获取这个地址(不想通过拦截函数的方式),并且那位老师也告诉我了,可以通过读取固定的一个内存地址值,然后通过多次偏移来得到这个解密密码,比如老师已经告诉我了,可以读取0x12345678处的值,然后再读取0x12345678指向的值,再读取指向值+8所指向的值就是解密密码(也就是前面Call XXXX后的返回值eax),请问我该怎么找到那个固定内存值0x12345678?因为我逆向的那个程序也会不断更新,更新后的固定地址值就不是0x12345678呢?所以我想请问一下怎么找到那个0x12345678呢?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 3221
活跃值: (3031)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
算出固定的偏移就行
全局变量0x12345678 = 变化的开始地址+固定的偏移
变化的开始地址=GetModule(L"模块");
固定的偏移=0x12345678 - GetModule(L"模块");
2024-5-14 11:08
0
雪    币: 234
活跃值: (286)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
KongKong20 算出固定的偏移就行 全局变量0x12345678 = 变化的开始地址+固定的偏移 变化的开始地址=GetModule(L"模块"); 固定的偏移=0x12345678 - G ...
老师你理解错我意思了,我需要找到这个0x12345678,想找到为什么会是0x12345678,因为我逆向的那个软件的下一个版本的固定值就不是0x12345678了,可能变成了0x8888888了。
2024-5-14 11:11
0
雪    币: 156
活跃值: (1572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
下一个版本,源码变动,编译器编译过后,地址可能就不一样,或许下一个版本代码修改,这个地址就没了,你如何能够预知未来?或者能找到代码的特征码,然后全文搜索来定位。
2024-5-14 12:11
0
雪    币: 1131
活跃值: (4202)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
5
问一下软件作者
2024-5-14 12:19
0
雪    币: 3
活跃值: (2679)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用大白补丁工具的 内存指向地址来获取吧。
2024-5-14 15:32
0
雪    币: 228
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
找地址一般不准,最直接的办法是hook,在函数里拦截。

全局变量确实是固定在相对于段或模块某个偏移,具体的偏移地址就在代码里写死的,你就在全局变量访问的汇编里就能看到偏移,比如movl指令访问全局变量的地址偏移,可以自己多反编译或做实验。
2024-5-14 15:54
0
雪    币: 75
活跃值: (953)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
2种方案,第一个是通过全局地址加偏移方式来动态读取,第二种方式,是基于基于第一种方式,在地址写入之前下一个写入断点,然后记录写入的地址的特征码,版本更新的时候来快速定位
2024-5-14 17:33
0
雪    币: 336
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
找这个函数特征码,寄希望于作者后面更新不动该函数。如 int a(int a,int b)这个函数参数不改头特征就是固定的。
2024-5-15 13:25
0
雪    币: 13067
活跃值: (5728)
能力值: ( LV5,RANK:77 )
在线值:
发帖
回帖
粉丝
qux
10
把程序发一下看看
2024-5-18 08:56
0
游客
登录 | 注册 方可回帖
返回
//