能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
[原创]AntiOllvm 去除二进制文件Ollvm混淆并编译回二进制文件
baikaishiu
还有个问题,我没用过ret2dec,IDA在转某些较大的函数时,生成的高级语言代码,我感觉是有点问题的,这个不知道是不是我哪里没用对,你的函数就直接优化它们生成的高级语言就不出错?我是完全不敢,只能在 ...
如果真有问题那也是IDA的问题,最主要保证翻译和优化正确,那么编译的结果自然正确,翻译的正确性需要详细的每条指令测试,优化的正确使用LLVM内部优化可以信任,其它如retdec的优化本身有许多bug,在非llvm内部优化尽量做到保守,保证其正确性。
|
能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
[原创]AntiOllvm 去除二进制文件Ollvm混淆并编译回二进制文件
krash
看起来楼主实现了类似SATURN Software deobfuscation framework based on LLVM的反混淆框架,
自己使用还是很有价值的,但是要难商业化,我觉得还是有 ...
编译回二进制的目的是在于可以直接运行,生成二进制文件就可以用于其它工具分析,其实参数的识别我仔细分析过arm的参数,只要你传入的参数>=实际参数,那么多余的参数可以不用管,因为实际函数用不到,大于4个参数写入堆栈是在调用方堆栈上写入到sp正偏移,但是sp的值并没有改变,被调用函数方使用就读取没使用就不用读取,返回后sp还原,因此只要你保证参数大于等于实际参数就可以了。间接调用就把调用函数当作函数指针就行了,至于虚函数反编译后本质就只是偏移,只要保证翻译优化正确那么偏移就会正确,变参函数比如标准库这可以直接拿到函数签名。最后还有人工指定函数参数
|
能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
|
能力值:
( LV3,RANK:30 )
|
-
-
[原创]AntiOllvm 去除二进制文件Ollvm混淆并编译回二进制文件
挤蹭菌衣
用retdec反编译的ir优化
去除ollvm应该是我先在论坛上发的吧
收费了???
你的帖子我也看过,但是我使用的方法跟你完全不一样,你用到了模拟执行,而我目前只是静态分析,不能说我使用retdec就是抄你的吧,样本我也公开了,你可以自己去试试你的方法效果怎样,反正我没试过。再说我添加了很多arm neon指令支持,还有修复各种Bug,回编译,这跟你那个完全没关系吧
|
能力值:
( LV3,RANK:30 )
|
-
-
|