能力值:
( LV9,RANK:210 )
|
-
-
2 楼
写完帖子后发现一个问题:
打开程序,点“查找”即可在编辑中显示OpenFileMapping在内存中的地址,那个“调用地址”按钮本来是想写段代码演示下用找到的地址调用OpenFileMapping的,但我用"查找进程API内存地址的小程序"查了下,验证是一致的,就懒得写了,大家将就着用下,或者在源文件中去掉,界面很丑,已经被朋友批评过了,没办法,汇编写界面是软肋
还有各位童鞋要注意的是OpenFileMapping在Kernel32.dll中的名字是“OpenFileMappingA”,不要弄错了,这个程序是区分大小写的,不然比较会出错
欢迎高手指点
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
大哥,这个东西早就有了,叫做“API地址专家”,多看看那些你不屑的小工具,有时候会有大发现,谢谢,想把那个软件什么样,传上来,可是不会弄图片呀!你百度去吧!
|
能力值:
( LV9,RANK:210 )
|
-
-
4 楼
呵呵,我写这个不是为了写工具,只是发源代码,分析方法和思路,程序只是把自己的想法表达出来的东西而已,例外提高下自己的PE分析水平
|
能力值:
( LV9,RANK:140 )
|
-
-
5 楼
主要就获取映像基址,
映像基址计算式子:*(ULONG*)(base+*(ULONG*)(base+0x3c)+0x34);
和
输出表地址计算式子: *(ULONG*)(base+*(ULONG*)(base+0x3c)+0x78);
还有
遍历输出表
这不能说是新方法,说白了就是最常规的方法了,首选的方法。
另外,我觉得Kernel32.dll是在系统目录下,CreateFile第一个参数应该可以直接写Kernel32.dll 吧?
|
能力值:
( LV7,RANK:110 )
|
-
-
6 楼
遍历PE输入表函数名称,GetProcAddress + wsprintf。
|
能力值:
( LV9,RANK:210 )
|
-
-
7 楼
对于系统文件的确可以直接读取文件,忘了,多谢指导
|
能力值:
( LV9,RANK:140 )
|
-
-
8 楼
不客气,还得向你学习。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
弱弱的问个问题,ImageBase说的是优先被加载的内存基址,对于dll来说这个地址很少会被加载到这个地址的。用这种方法获取加载的dll基址是不是有问题啊?我不太懂的,只是有点疑惑,如果我错了,就当笑话了。
|
能力值:
( LV15,RANK:440 )
|
-
-
10 楼
微软在发布系綂的时候,针对每个系统dll都进行过处理,使得ImageBase不重叠,这样使得系统dll可以优先加载到自己的首选基址上。详细情况参考《windows核心编程》
还有对于ASLR技术的应用可能导致系统dll的加载地址在首选加载基址附近浮动,不过一旦系统启动以后,不同进程中的加载基址是相同的。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
学习一下·1
谢谢分享
有码
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
不会呀。已经预定好了。就在优先加载基址上加载。
|
能力值:
( LV4,RANK:50 )
|
-
-
13 楼
大哥,你这个程序有个巨大的BUG哦~~
jnz FAA_FindExportAPIAddr_NoFind ;如果ecx=0,说明函数字符全部相同
mov eax, [ebx].AddressOfFunctions ;取FAT表RVA
add eax, _BaseAddr ;取FAT表RVA内存地址
add eax, edx ;取查找函数FAT表项的地址
mov eax, [eax] ;取查找函数的RVA
add eax, _BaseAddr ;取查找函数的内存地址
.break ;找到则退出循环
代码简单看了下,居然没有用AddressOfNameOrdinals这个字段对AddressOfNames和AddressOfFunctions的对应关系进行转换呢?函数名RVA数组和函数地址RVA数组可不是顺序对应的哦,不过恰好kernel32.dll里的函数名RVA数组和函数地址RVA数组一一对应,你随便换个dll估计就计算错误了,比如lpk.dll
另外,不管怎么说你的asm写的让人看得太纠结了呢
mov al, 0
sub edx, edx
sub eax, eax
随便看了一下,这些指令优化一下总好看些吧
|
能力值:
( LV3,RANK:30 )
|
-
-
14 楼
Win7下按 查找 会崩溃
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
可以多加深理解!谢谢分享
|
|
|