首页
社区
课程
招聘
找到一内存基址, 每次都变化, 怎么确定?
发表于: 2012-8-23 08:37 5294

找到一内存基址, 每次都变化, 怎么确定?

2012-8-23 08:37
5294
下面标红的两个地址每次都变化, 基址如何确定?
入口点上的代码:

00302D6C > $  E8 4BFDFFFF   call calc.00302ABC     入口点.
00302D71   .  6A 58         push 58
00302D73   .  68 E82E3000   push calc.00302EE8
00302D78   .  E8 EB99FFFF   call calc.002FC768
00302D7D   .  33DB          xor ebx,ebx
00302D7F   .  895D E4       mov dword ptr ss:[ebp-1C],ebx
00302D82   .  895D FC       mov dword ptr ss:[ebp-4],ebx
00302D85   .  8D45 98       lea eax,dword ptr ss:[ebp-68]
00302D88   .  50            push eax                                 ; /pStartupinfo
00302D89   .  FF15 4C112F00 call dword ptr ds:[<&KERNEL32.GetStartup>; \GetStartupInfoA

002F63FF   .  BF 10423400   mov edi,calc.00344210                    ;  基址
002F6404   .  8BCF          mov ecx,edi                              ;  1
002F6406   .  E8 1EE7FFFF   call calc.002F4B29
002F640B   .  84C0          test al,al
002F640D   .  0F84 EE850000 je calc.002FEA01
002F6413   >  0FB7C6        movzx eax,si

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 138
活跃值: (475)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
某个歪瓜群的验证题吧?
通常找不到基址这种情况,写瓜的时候直接用hook 解决;

那篇验证贴指明了要用基址来获取, 我也没找到通用基址~
2012-8-23 09:50
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
肯定不是基址  动态分配的!
2012-8-23 09:52
0
雪    币: 3581
活跃值: (729)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
先找到基地址,然后加上相对地址就找到了。
EXE的基地址正常都是00400000,DLL的可能是别的。
相对地址可以这么计算就是用:当前地址-基地址=相对地址
如果你要锁定你的地址就用:基地址+相对地址就找到了!
2012-8-23 10:00
0
雪    币: 853
活跃值: (4002)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
我用VC2008编译代码也遇到过这样的问题。
一、如果有源码 的话,设置编译选项:
/DYNAMICBASE:NO
/FIXED:YES

二、没有源码只有PE文件,有2种方法
1)修改PE文件
使用LordPE修改PE头,OptionalHeader.DllCharacteristics&=~0x0040

2)修改注册表,修改后重启机器
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
MoveImages=0
2012-8-23 10:10
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
6
反汇编一下计算器,所找到的基址 - pe文件头起始基址 = 相对偏移

然后,运行计算器,获取计算器模块内存的pe头基址,在加上 相对偏移,得到的是就内存中的地址了。

计算公式: 内存中的地址 = 文件反汇编所找到的基址 - pe文件头起始基址 + 计算器模块内存的pe头基址
                &&
                文件中的地址 = 内存中的地址 - 计算器模块内存的pe头基址 + pe文件头起始基址
2012-8-23 14:23
0
雪    币: 21023
活跃值: (4220)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
Address = Base of Module + Offset
==>
    Offset = Address - Base of Module

DWORD Base = (DWORD)GetModuleHandle("application.exe");
DWORD Address = Base + Offset;
2012-8-23 18:03
0
游客
登录 | 注册 方可回帖
返回
//