能力值:
( LV2,RANK:10 )
|
-
-
2 楼
广告?
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
|
能力值:
( LV10,RANK:175 )
|
-
-
4 楼
用retdec反编译的ir优化 去除ollvm应该是我先在论坛上发的吧 收费了???
|
能力值:
( LV3,RANK:30 )
|
-
-
5 楼
挤蹭菌衣
用retdec反编译的ir优化
去除ollvm应该是我先在论坛上发的吧
收费了???
你的帖子我也看过,但是我使用的方法跟你完全不一样,你用到了模拟执行,而我目前只是静态分析,不能说我使用retdec就是抄你的吧,样本我也公开了,你可以自己去试试你的方法效果怎样,反正我没试过。再说我添加了很多arm neon指令支持,还有修复各种Bug,回编译,这跟你那个完全没关系吧
|
能力值:
( LV10,RANK:175 )
|
-
-
6 楼
北辰制作
你的帖子我也看过,但是我使用的方法跟你完全不一样,你用到了模拟执行,而我目前只是静态分析,不能说我使用retdec就是抄你的吧,样本我也公开了,你可以自己去试试你的方法效果怎样,反正我没试过。再说我添 ...
大佬能不能放出优化的源码一起技术交流下 我看你这个图是纯去除有源码的平坦化的 还有能私聊一下这个反混淆值几个钱吗 我也想喝点汤 我这还有个还原vmp的半成品 最后 我没有模拟执行 那只是方便的叫法 我是纯静态分析跟踪var值变化
|
能力值:
( LV3,RANK:30 )
|
-
-
7 楼
你可以加我群私聊,之所以放出有源码的那是不想惹上法律问题
最后于 2021-6-17 21:28
被北辰制作编辑
,原因:
|
能力值:
( LV3,RANK:30 )
|
-
-
8 楼
挤蹭菌衣
大佬能不能放出优化的源码一起技术交流下 我看你这个图是纯去除有源码的平坦化的
还有能私聊一下这个反混淆值几个钱吗 我也想喝点汤 我这还有个还原vmp的半成品
最后 我没有模拟执行 那只是方便的叫法 ...
可以加群私聊
|
能力值:
( LV10,RANK:175 )
|
-
-
9 楼
北辰制作
可以加群私聊
群在哪里 没找到 点错了不好意思
|
能力值:
( LV9,RANK:180 )
|
-
-
10 楼
看起来楼主实现了类似SATURN Software deobfuscation framework based on LLVM的反混淆框架,
自己使用还是很有价值的,但是要难商业化,我觉得还是有点难度:
- 无法恢复CFG就直接废了,比如我开源的混淆,阿里的混淆,光混淆。
- 代码混淆加编译器优化后,各种稀奇古怪的case可能非常多,出现问题后,如果工具不能自己完全掌控的话就只能等你处理,等你处理好可能我自己都调试出来了。
- 回编译后的代码正确性很难保证。比如间接的函数调用(c++虚函数,函数指针等),他们的参数识别基本都是反编译器瞎猜的。一些变长的函数参数(printf),它的参数也不好识别。我的混淆器就可以把直接的函数调用转成间接的。不知道楼主怎么保证函数调用参数是正确的?
另外还有个疑问,既然已经用RetDec,为啥不直接使用他的反编译器,个人感觉没必要将反混淆的IR再编译回二进制?
最后于 2021-6-17 22:06
被krash编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
只能去ollvm吗?定制的能去不?
|
能力值:
( LV3,RANK:30 )
|
-
-
12 楼
krash
看起来楼主实现了类似SATURN Software deobfuscation framework based on LLVM的反混淆框架,
自己使用还是很有价值的,但是要难商业化,我觉得还是有 ...
编译回二进制的目的是在于可以直接运行,生成二进制文件就可以用于其它工具分析,其实参数的识别我仔细分析过arm的参数,只要你传入的参数>=实际参数,那么多余的参数可以不用管,因为实际函数用不到,大于4个参数写入堆栈是在调用方堆栈上写入到sp正偏移,但是sp的值并没有改变,被调用函数方使用就读取没使用就不用读取,返回后sp还原,因此只要你保证参数大于等于实际参数就可以了。间接调用就把调用函数当作函数指针就行了,至于虚函数反编译后本质就只是偏移,只要保证翻译优化正确那么偏移就会正确,变参函数比如标准库这可以直接拿到函数签名。最后还有人工指定函数参数
|
能力值:
( LV6,RANK:90 )
|
-
-
13 楼
krash
看起来楼主实现了类似SATURN Software deobfuscation framework based on LLVM的反混淆框架,
自己使用还是很有价值的,但是要难商业化,我觉得还是有 ...
你把r0-r3挂到call的use链上就可以了,因为r0-r3穿过call,是会被破坏的,所以编译器原生不信任经过call的r0-r3
|
能力值:
( LV6,RANK:90 )
|
-
-
14 楼
北辰制作
编译回二进制的目的是在于可以直接运行,生成二进制文件就可以用于其它工具分析,其实参数的识别我仔细分析过arm的参数,只要你传入的参数>=实际参数,那么多余的参数可以不用管,因为实际函数用不到,大 ...
你这边内部测试过多少个函数可以写回了?最大测试的函数有多大?
|
能力值:
( LV3,RANK:30 )
|
-
-
15 楼
baikaishiu
你这边内部测试过多少个函数可以写回了?最大测试的函数有多大?
我正在测一个超大函数,论坛上找的样本,且是魔改版的混淆,需要点时间,目前的版本使用正常的ollvm基本上没有问题可以完美还原
|
能力值:
( LV6,RANK:90 )
|
-
-
16 楼
北辰制作
我正在测一个超大函数,论坛上找的样本,且是魔改版的混淆,需要点时间,目前的版本使用正常的ollvm基本上没有问题可以完美还原
超大是多大?我这边现在最大时26K已经写回了,正在尝试32k的,以前的mem-phi实现的有问题,正在重写
|
能力值:
( LV3,RANK:30 )
|
-
-
17 楼
baikaishiu
超大是多大?我这边现在最大时26K已经写回了,正在尝试32k的,以前的mem-phi实现的有问题,正在重写
你也在去混淆?找到一个50多k的,函数大小无所谓,关键是混淆的程度
|
能力值:
( LV6,RANK:90 )
|
-
-
18 楼
不是的,体积大小的影响太大了,各种情况覆盖的情况复杂很多。比如,这里有个9K的函数
看起来时不是挺复杂,但是实际上解起来很简单。
这个26K的,看起来就一点点,实际上复杂很多: 这个里面貌似有在做多媒体优化,大量的simd指令,写回去很麻烦。
这个是我最后转出来的结果15520:
|
能力值:
( LV6,RANK:90 )
|
-
-
19 楼
北辰制作
你也在去混淆?找到一个50多k的,函数大小无所谓,关键是混淆的程度
真正的上超大的,可能是微信的so里面有2个 300k的函数,和一个 3M左右的混淆函数,64K以下的个人感觉还好
|
能力值:
( LV6,RANK:90 )
|
-
-
20 楼
北辰制作
你也在去混淆?找到一个50多k的,函数大小无所谓,关键是混淆的程度
我个人感觉你这套机制有点问题,你太依赖于ret2dec本身的优化了,假如某个变形ollvm,把整个cfg断开了以后,也就是反编译器走不到下一个指令地址,断开了,那么你优化出来就是错的。你必须得先解开整个ollvm,找到下一个反汇编地址才行
|
能力值:
( LV3,RANK:30 )
|
-
-
21 楼
baikaishiu
不是的,体积大小的影响太大了,各种情况覆盖的情况复杂很多。比如,这里有个9K的函数看起来时不是挺复杂,但是实际上解起来很简单。这个26K的,看起来就一点点,实际上复杂很多:这个里面貌似有在做多媒体优化 ...
所以为了支持arm的neon指令我花了大量时间翻译,软件只要做到80%能解就行了,即使解不完全还能正确编译回去也可以
|
能力值:
( LV6,RANK:90 )
|
-
-
22 楼
还有个问题,我没用过ret2dec,IDA在转某些较大的函数时,生成的高级语言代码,我感觉是有点问题的,这个不知道是不是我哪里没用对,你的函数就直接优化它们生成的高级语言就不出错?我是完全不敢,只能在cfg上做。
|
能力值:
( LV6,RANK:90 )
|
-
-
23 楼
北辰制作
所以为了支持arm的neon指令我花了大量时间翻译,软件只要做到80%能解就行了,即使解不完全还能正确编译回去也可以 所以你手工把llvm ir转成了arm neon?没有完全用他们的后端?
llvm ir好像有好几层的(我没用过llvm),hir, mir, lir,你是从哪一层ir开始转汇编的?
我看你的帖子,其实没有完全看懂
最后于 2021-6-18 00:00
被baikaishiu编辑
,原因:
|
能力值:
( LV3,RANK:30 )
|
-
-
24 楼
baikaishiu
还有个问题,我没用过ret2dec,IDA在转某些较大的函数时,生成的高级语言代码,我感觉是有点问题的,这个不知道是不是我哪里没用对,你的函数就直接优化它们生成的高级语言就不出错?我是完全不敢,只能在 ...
如果真有问题那也是IDA的问题,最主要保证翻译和优化正确,那么编译的结果自然正确,翻译的正确性需要详细的每条指令测试,优化的正确使用LLVM内部优化可以信任,其它如retdec的优化本身有许多bug,在非llvm内部优化尽量做到保守,保证其正确性。
|
能力值:
( LV3,RANK:30 )
|
-
-
25 楼
baikaishiu
北辰制作
所以为了支持arm的neon指令我花了大量时间翻译,软件只要做到80%能解就行了,即使解不完全还能正确编译回去也可以 所以你手工把ll ...
是在翻译 arm neon 汇编指令时将其翻译为合法的 llvm ir,编译肯定的是用LLVM的后端,只是要自己处理符号重定位才能回填文件
|
|
|