首页
社区
课程
招聘
[旧帖] [求助]运行期间解密出来的算法,要怎么取出来? 0.00雪花
发表于: 2008-3-20 15:29 3213

[旧帖] [求助]运行期间解密出来的算法,要怎么取出来? 0.00雪花

2008-3-20 15:29
3213
程序会先申请段内存 然后打开一个文件解密出来算法 复制到申请的内存中 然后再call

这样的话这个算法用ida就没办法分析了 用od分析又太复杂 子函数太多 而且每次重新打开后首地址都不一样 甚至指令也会变化 比如原来的
0F56FE8F    68 9CD15E0F     push    0F5ED19C
0F56FE94    C74424 04 9CD15>mov     dword ptr [esp+4], 0F5ED19C
0F56FE9C    FF15 90B05B0F   call    dword ptr [F5BB090]
第二次打开的时候可能变成了
0CC1FE8F    68 9CD1C90C     push    0CC9D19C
0CC1FE94    C74424 04 9CD1C>mov     dword ptr [esp+4], 0CC9D19C
0CC1FE9C    FF15 90B0C60C   call    dword ptr [CC6B090]

这样的话 这个算法能不能取出来?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
为什么IDA不能分析?
2008-3-20 18:13
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
3
很多人都不清楚的小技巧:IDA中将用虚拟内存分配的节Segment的属性"Debugger Segment"取消,会将虚拟内存中的节保留在数据库中。

Enjoy it.
2008-3-20 18:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
跟下去把算法记录下来
2008-3-20 18:31
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
为什么IDA不能分析?
  //因为是运行期间生成的代码

很多人都不清楚的小技巧:IDA中将用虚拟内存分配的节Segment的属性"Debugger Segment"取消,会将虚拟内存中的节保留在数据库中。

Enjoy it.
   //你是说使用ida调试吗?怎么取消"Debugger Segment"属性?

跟下去把算法记录下来
  //一次性把代码跟下来?子函数太多太复杂几乎完成不了 每重新跟一次 指令会变化
2008-3-20 22:16
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
可以动态调试后,脚本保存二进制文件,再导入后分析。
也可以用od运行到算法展开到内存后dump出来,给IDA分析。
2008-3-20 23:00
0
雪    币: 297
活跃值: (27)
能力值: ( LV13,RANK:380 )
在线值:
发帖
回帖
粉丝
7
为什么IDA不能分析?
  //因为是运行期间生成的代码
运行期的代码也可以分析

有的程序为了anti,当然会每次都会变化虚拟内存内的文件装载基址,你得先找到分配内存的地方,使基址每次都固定下来。比如我见过有程序用随机数分配无用的内存,当然随后分配的内存的基址会变化。那么你可以将这个随机数固定成0x0(有前提的)。

跟下去把算法记录下来
  //一次性把代码跟下来?子函数太多太复杂几乎完成不了 每重新跟一次 指令会变化
想继续分析,最关键的问题还是找清楚同一内存地址处的指令为什么会变化的原因。
同一机器上,程序没有什么花样的话,一般不会有变化。

很多人都不清楚的小技巧:IDA中将用虚拟内存分配的节Segment的属性"Debugger Segment"取消,会将虚拟内存中的节保留在数据库中。
->
很多人都不清楚的小技巧:IDA中将用虚拟内存分配的节Segment的属性"Debugger Segment"取消,会将虚拟内存中的节的数据、用户和程序自动分析的结果都保留在数据库idb中。
2008-3-21 00:46
0
游客
登录 | 注册 方可回帖
返回
//