首页
社区
课程
招聘
[原创]修复findcrypt2插件可能导致IDA6.8崩溃的问题
发表于: 2016-5-15 15:26 4310

[原创]修复findcrypt2插件可能导致IDA6.8崩溃的问题

2016-5-15 15:26
4310
如果一个被分析的文件包含findcrypt2能识别出来的加密算法,经过findcrypt2识别标记位置后,在数据区地址上点击右键的话IDA会崩溃(代码区在地址上点击也会),报内部520号错误。

错误的原因可能是findcrypt2的标记位置函数mark_location使用的IDA的curloc接口,可能在IDA6.8已经改变了,findcrypt2这样使用已经不正确兼容,推断依据是
IDA的SDK中有声明curloc类是“Helper functions. Should not be called directly!”。
经过findcrypt2这样标记后会触发到IDA调用curloc_markdesc(, , 0, 0),而curloc_markdesc内部就会调用qstpncpy(0,,0),qstpncpy内部当 a1 >= a1 + a3 时就报内部520错误。
  if ( a1 >= a1 + a3 )
  {
    if ( under_debugger )
      __debugbreak();
    interr(520);
  }
所以我们去掉对curloc的使用,改用set_name和set_cmt来实现标记位置。
源代码及二进制文件已上传,见附件,也编译了64位IDA用的版本。
20160516:
修复一处错误:加密算法名称中含有'/'时,将导致set_name调用失败。
findcrypt2_20160516.7z
findcrypt2_bin_20160516.7z

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 6499
活跃值: (3117)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
LZ真是66666
2016-5-15 18:38
0
雪    币: 576
活跃值: (1500)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
一直在用这个插件,还有一个问题,就是当ida动态调试android的so的时候,findcrypt会一直卡死,而且好像对Android 的so文件没有办法分析出来。不知道findcrypt2是否解决这个问题?

刚刚测试了一下,果然ida远程调试so的时候还是卡死。
上传的附件:
2016-5-15 21:34
0
雪    币: 4324
活跃值: (4838)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
你调试看下吧 看他为什么不退出了,有源码就简单。我这几天暂时不会调试安卓so,所以暂时不会遇到。
2016-5-15 22:59
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
谢谢楼主啦,我一直520错误,就是用啦老版本的IDB文件,一直找不到解决办法,楼主有没办法解决老版本IDB520错误的问题
2016-5-15 23:07
0
雪    币: 4324
活跃值: (4838)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
老版本的IDB你就在对应版本的IDA中继续他的工作了 新的分析才用新的IDA 这样最简单 不用折腾 不然你就去研究下吧在interr函数内部第一行下个断点
2016-5-16 00:01
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
占时先这样可以用
不知道具体原因
507A8460    8B4424 08       mov eax,dword ptr ss:[esp+8]             ; IDA_WLL.curloc_markdesc
507A8464    3B05 88BC8C50   cmp eax,dword ptr ds:[508CBC88] ;旧版这里为0x2f,新版为0
507A846A    77 36           ja short 507A84A2
507A846C    EB 34           jmp short 507A84A2                       ; 暴力修改就可以啦
507A846E    90              nop
507A846F    90              nop
507A8470    90              nop
507A8471    90              nop
507A8472    8D0440          lea eax,[eax*2+eax]
507A8475    03C0            add eax,eax
507A8477    837CC1 D4 00    cmp dword ptr ds:[eax*8+ecx-2C],0
507A847C    8D44C1 D0       lea eax,[eax*8+ecx-30]
507A8480    75 07           jne short 507A8489
507A8482    B8 66E38950     mov eax,offset 5089E366
507A8487    EB 02           jmp short 507A848B
507A8489    8B00            mov eax,dword ptr ds:[eax]
507A848B    8B5424 10       mov edx,dword ptr ss:[esp+10]
507A848F    56              push esi
507A8490    8B7424 10       mov esi,dword ptr ss:[esp+10]
507A8494    52              push edx
507A8495    50              push eax
507A8496    56              push esi
507A8497    E8 344BFAFF     call qstpncpy                            ; xxxxxxxxxxxxxx
507A849C    2BC6            sub eax,esi
507A849E    5E              pop esi
507A849F    C2 1000         retn 10
2016-5-16 00:55
0
雪    币: 163
活跃值: (1538)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
要重新分析的idb才可以,之前的IDA6.8分析过的idb仍然崩溃。
2016-5-16 09:31
0
雪    币: 576
活跃值: (1500)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
9
刚调试了一下,ida在动态调试的时候挂载在app_process ,然后分析的是这个地址空间,而这个地址空间非常大,导致一直在"Searching for crypto constants... 这个状态。具体怎么解决还没办法,那个兄弟知道求分享。

Debugger: attached to process /system/bin/app_process (pid=1433)
2A000000  ================= recognize_constants ============== BEE5A000

上传的附件:
2016-5-16 11:06
0
雪    币: 341
活跃值: (138)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
10
坐等楼上大神
2016-5-16 11:32
0
雪    币: 722
活跃值: (2098)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
吃瓜群众下载支持。
2016-5-16 13:58
0
雪    币: 4324
活跃值: (4838)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
12
app_process不知道是不是正确的进程,若确保是的话,即使再大也应该有尽头吧,也应该能搜索完,最多久点,你要看进度是否在先前推进,如果确定在往下搜索,没有陷入一个死循环的话,那么可以尝试减少搜索范围,如只搜索已加载的主程序模块及so模块,还有虚拟机动态生成的代码区,在完整点也搜索下程序动态分配内存区域。觉得麻烦的话,改插件为非自动执行方式,点run才运行,这样就不会苦等搜索结束了。
2016-5-16 17:54
0
雪    币: 576
活跃值: (1500)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
13
app_process 不是目标进程,它是负责启动java代码的一个核心进程,而它的地址空间又非常大,所以一直会卡在哪里进行搜索,搜索功能代码没有问题,是向前推进的,可以改成手动搜索,不要自动搜索就好了。
2016-5-16 20:53
0
游客
登录 | 注册 方可回帖
返回
//