首页
社区
课程
招聘
[求助]小白求助,未知dll参数分析问题
发表于: 2016-4-28 09:48 6600

[求助]小白求助,未知dll参数分析问题

2016-4-28 09:48
6600
现有商业化程序a.exe 程序使用b.dll .  我也想使用b.dll中的函数。奈何水平不高,参照一些方法生成了c.dll. a.exe能通过调用c.dll,再调用b.dll中的原始函数能运行完好。  因为a.exe有保护机制在olldbg中不能直接调试,求教高手指点一下,怎么样才能调试到b.dll中的参数调用方法? 只要给个思路,其它我再努力学习

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 144
活跃值: (31)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
2
自己写个exe 调用? 这样就随便调试。。。
2016-4-28 11:45
0
雪    币: 19
活跃值: (1111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
再你B.DLL下断点不就可以了吗?
2016-4-28 14:03
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果这样随便调试,我就不知道参数当时填的是什么值啊。 如果通过a.exe调用就能知道要填什么值。
2016-4-28 14:38
0
雪    币: 144
活跃值: (31)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
5
那就在你的c.dll里把参数打印出来 经过多次比较推算出大概的值
2016-4-28 15:00
0
雪    币: 300
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用ida打开,然后点Exports窗口,就可以看到,然而我也不太会用ida......
2016-4-28 15:07
0
雪    币: 300
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
随便找了个以前学习写的dll截的图
上传的附件:
  • 1.png (24.72kb,34次下载)
2016-4-28 15:11
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那个可能性不大吧。比如这是c.dll 关于对b.dll 中的SetOption 的调用的转发,这个怎么打印参数?你连参数的个数都不确定啊。
         
        __asm POP m_dwReturn[25 * TYPE long];
        WriteLog("Call SetOption");

        // 调用原始函数
        GetAddress("SetOption")();

         
        __asm JMP m_dwReturn[25 * TYPE long];
2016-4-28 15:11
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢了,你说的是导出函数吧。这个有很多办法看到的。 只能看到函数名啊。没有头文件或者pdb文件是不可能直接看到函数的声明的啊。 只能在通过调试器才能获取,问题就是我不知道现在怎么调试才能抓到A.exe调用c.dll的现场啊。  A.exe不能直接上Ollydbg,我试过很多次了有保护
2016-4-28 15:14
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
IDA看,c.dll不要用汇编,填填参数,用函数指针,一个个参数打印
OD万能的反反调试插件很多
2016-4-28 17:15
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
请问如果c.dll不用汇编实现转发函数调用到b.dll有点复杂吧?用汇编就简单多了。参数因该只能在调试状态下看到吧。麻烦解释清楚一点啊。
2016-4-28 18:28
0
雪    币: 144
活跃值: (31)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
12
如果是stdcall 能看到栈最后平衡多少 来猜测参数。。一般无非四字节指针 整型 字符串指针什么的。
2016-4-28 22:33
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
有没有实际弄过的啊?怎么一个思路可以取到b.dll 中被调用时的参数呢
2016-5-2 18:09
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
你什么HOOK吗请问?你把这个你要的函数HOOK再把值保存到你想你的地方,不能调试能HOOK吧?
2016-5-3 18:38
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
你是想hook吧
2016-5-4 10:32
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我不是想hook, 从hook本身的意义来说,我现在应当已经实现了hook.请教怎么样才能在hook的dll里进行调试啊?引用我在csdn上找到的一段话:
今天想到了一个很好的办法,来解决参数的问题,不过有一定难度。  
  1。根据以前讲的各种方法,可以很快速的知道参数的个数,假设该函数  
  名称为MyTestFunc,参数的个数为3个。  
  于是可以定义如下:  
  long   MyTestFunc(long   p1,long   p2,long   p3);  
  2。安装一个HOOK(DLL)  
  3。通过别的程序调用,触发HOOK,调试到HOOK里面,就可以很清楚的知道  
  调用的参数,数值。  
  -------------  
   现在的问题是到了第3步,不能调试,只能用release版本,是什么原因呢
2016-5-10 23:10
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
过掉a.exe的保护机制
2016-5-11 00:08
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
已经过掉了a.exe的保护机制了,可以用od进行调试。因为使用dll中的函数确实太多了,一个个跟的话可能需要耗费太多的时间和精力。有没有办法在hook后的dll中对每个函数的参数进行比较容易实现的取值?或者说这种想法到底可不可行呢?

今天想到了一个很好的办法,来解决参数的问题,不过有一定难度。  
  1。根据以前讲的各种方法,可以很快速的知道参数的个数,假设该函数  
  名称为MyTestFunc,参数的个数为3个。  
  于是可以定义如下:  
  long   MyTestFunc(long   p1,long   p2,long   p3);  
  2。安装一个HOOK(DLL)  
  3。通过别的程序调用,触发HOOK,调试到HOOK里面,就可以很清楚的知道  
  调用的参数,数值。
2016-5-11 06:02
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
有没有高手指点一下?自己再顶一个
2016-5-11 16:19
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
同顶,请问楼主问题解决了吗?我也遇到同样的问题!!能分享下吗?
2016-11-10 23:30
0
游客
登录 | 注册 方可回帖
返回