能力值:
( LV1,RANK:0 )
2 楼
我去,还有第三关
能力值:
( LV2,RANK:10 )
3 楼
这里还有很多,感觉写不下,比如jumptable识别的时候是有用ir的方式的,有的是pattern match的方式的;vtable和pointer array的识别也是这样;是全量分析和单函数分析,都是要有考量的。 写完了这个东西才能发现ida到底是多高的一座山
能力值:
( LV11,RANK:185 )
4 楼
1
能力值:
( LV2,RANK:10 )
5 楼
666
能力值:
( LV2,RANK:10 )
6 楼
6
能力值:
( LV11,RANK:185 )
7 楼
仔细看了你写的内容,首先这个控制流的构建,或者是递归向下,我感觉你没有阐述清楚,或者说我没看懂 根据我的一些分析,ida,是以函数为单个控制流分析的单位,所以,所有的控制流分析,都是建立在,首先分析出汇编是一个函数的基础上,这个可以通过栈指令之类的分析.当分析完一个汇编函数等等起始和结束以后,在通过这个汇编函数的指令,来构建控制流,这种情况下,通过各种跳转指令的分割,很容就可以构建出控制流了,置于剩下的swith分析,if分析,代码优化这些都是在这个之上了,目前大规模的使用中间码进行指令归约,然后在进行二次的数据分析,中间码本来就是一种偏向于高级语言的表达形式
能力值:
( LV2,RANK:10 )
8 楼
6
能力值:
( LV2,RANK:10 )
9 楼
Thehepta
仔细看了你写的内容,首先这个控制流的构建,或者是递归向下,我感觉你没有阐述清楚,或者说我没看懂
根据我的一些分析,ida,是以函数为单个控制流分析的单位,所以,所有的控制流分析,都是建立在,首先分析 ...
第一个函数的确认问题:应该是我没有描述清楚,我写的elf的入口,有的时候就是函数,但是又不全是,比如c++的异常部分,它在elf里面的表现就是一个入口,要是强制说它是一个函数有的时候也没有错,一个异常处理块编译器优化的时候是会做share的。
第二个问题函数边界的问题:从elf的角度来说,你可以规约出一个function head,但是没有办法提前确定一个function的end,比如我举的bl _exit。
第三个问题:elf function的控制流跟jvm或者dalvik的fucntion完全不一样,他们有边界,知道end在哪里。elf的完全不知道;
比如一个函数 fun_0x1111, 它的basic block可能是连续的,也可能是跳跃的,因为basic block在编译器优化的过程中也是可以share的。
所以就elf的控制流就是一堆pass堆积着递归的过程。
能力值:
( LV2,RANK:10 )
10 楼
Thehepta
仔细看了你写的内容,首先这个控制流的构建,或者是递归向下,我感觉你没有阐述清楚,或者说我没看懂
根据我的一些分析,ida,是以函数为单个控制流分析的单位,所以,所有的控制流分析,都是建立在,首先分析 ...
感谢你的回复,我觉得这个是发了这么多东西,第一次遇到能讨论的人。
能力值:
( LV11,RANK:185 )
11 楼
neocanable
Thehepta
仔细看了你写的内容,首先这个控制流的构建,或者是递归向下,我感觉你没有阐述清楚,或者说我没看懂
根据我的一些分析,ida,是以函数为单个控 ...
我觉得你这个说法不是完全对的,elf function 的函数边界是可以分析出来的,而且只要不是用什么内联汇编,汇编函数,裸函数这些,一般都能分析出来,比如c代码编译的函数,是符合一定的的编译规则的,这是现代编译工具中的做法,你可以理解为反编译可以取巧的办法,你的想法是纯汇编来还原的思路,像ida这种工具,就像我说的,他是以函数为单位进行反编译,所以如果一个汇编函数没法分析出来,反编译也会失败,汇编函数如果分析失败,反编译也会失败
能力值:
( LV11,RANK:185 )
12 楼
neocanable
Thehepta
仔细看了你写的内容,首先这个控制流的构建,或者是递归向下,我感觉你没有阐述清楚,或者说我没看懂
根据我的一些分析,ida,是以函数为单个控 ...
做这个的比较少,因为ida 或者说某些工具做的很好,你只会一点完全撼动不了他的地位,而且国内公司没有相关工作岗位,一般后续都变成搞逆向了
能力值:
( LV2,RANK:10 )
13 楼
我觉得这个是一个误区,反汇编确实没有函数边界,IDA本身它也不知道function end,它也是递归向下的一点点的发现的,在整体的递归向下后有linear scan等等pass来补漏,看着像能发现一个函数而已。
能力值:
( LV2,RANK:10 )
14 楼
Thehepta
做这个的比较少,因为ida 或者说某些工具做的很好,你只会一点完全撼动不了他的地位,而且国内公司没有相关工作岗位,一般后续都变成搞逆向了
IDA/binary ninja这些工具值钱的是积累,国内确实没有人做这方面的产品,不赚钱,白忙活。而且还有破解的用。
能力值:
( LV5,RANK:70 )
15 楼
77fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9s2g2*7K9s2g2Q4x3X3c8f1L8%4m8Q4x3V1k6^5k6r3g2U0i4K6t1$3L8X3u0K6M7q4)9K6b7W2!0q4y4g2!0n7x3g2)9^5y4g2!0q4y4#2)9^5y4q4!0n7y4W2!0q4y4W2)9&6b7#2)9^5z5g2!0q4y4q4!0n7b7g2!0n7b7g2!0q4z5q4!0n7y4#2)9&6c8W2!0q4y4W2)9^5z5q4)9&6x3g2!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4W2!0m8x3q4!0n7y4#2!0q4y4g2)9&6b7#2!0m8z5q4!0q4y4g2)9^5x3g2)9&6b7g2!0q4y4g2)9&6x3q4)9^5b7#2!0q4y4W2!0m8x3q4!0n7y4#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4q4!0n7b7g2)9^5b7W2!0q4y4W2)9^5x3#2)9^5y4g2)9J5y4X3&6T1M7%4m8Q4x3@1t1`.
能力值:
( LV2,RANK:10 )
16 楼
zhuzhu_biu
01eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9s2g2*7K9s2g2Q4x3X3c8f1L8%4m8Q4x3V1k6^5k6r3g2U0 居然有人跟我一样在做同样的事情 [em_0106]
我仔细看了xdec这个repo,我认为解码的部分还有很长的路要走,加油
能力值:
( LV2,RANK:10 )
17 楼
tql
能力值:
( LV5,RANK:70 )
18 楼
neocanable
我仔细看了xdec这个repo,我认为解码的部分还有很长的路要走,加油
ce0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9s2g2*7K9s2g2Q4x3X3c8f1L8%4m8Q4x3V1k6^5k6r3g2U0i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8Y4y4H3k6h3y4K6i4K6u0r3j5i4u0E0y4U0c8Q4x3X3g2^5M7%4m8W2j5#2!0q4z5q4!0m8y4#2!0m8x3#2!0q4y4#2!0m8x3q4)9^5x3g2!0q4z5g2)9^5x3#2!0m8z5q4!0q4y4g2)9^5z5q4)9^5y4W2!0q4y4g2!0n7y4#2!0n7x3W2!0q4y4#2!0n7b7W2)9^5c8W2!0q4y4g2)9&6c8W2!0n7b7g2!0q4y4W2)9&6b7#2!0m8b7#2!0q4z5q4!0n7y4W2)9^5b7W2!0q4y4q4!0n7b7g2)9^5c8g2!0q4y4g2!0m8c8g2)9^5b7#2!0q4y4g2)9&6y4W2)9^5y4q4!0q4y4q4!0n7b7g2)9^5y4R3`.`.
能力值:
( LV2,RANK:10 )
19 楼
zhuzhu_biu
9f4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9s2g2*7K9s2g2Q4x3X3c8f1L8%4m8Q4x3V1k6^5k6r3g2U0i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8Y4y4H3k6h3y4K6i4K6u0r3j5i4u0E0y4U0c8Q4x3X3g2^5M7%4m8W2j5#2!0q4z5q4!0m8y4#2!0m8x3#2!0q4y4#2!0m8x3q4)9^5x3g2!0q4z5g2)9^5x3#2!0m8z5q4!0q4y4g2)9^5z5q4)9^5y4W2!0q4y4g2!0n7y4#2!0n7x3W2!0q4y4#2!0n7b7W2)9^5c8W2!0q4y4g2)9&6c8W2!0n7b7g2!0q4y4W2)9&6b7#2!0m8b7#2!0q4z5q4!0n7y4W2)9^5b7W2!0q4y4q4!0n7b7g2)9^5c8g2!0q4y4g2!0m8c8g2)9^5b7#2!0q4y4g2)9&6y4W2)9^5y4q4!0q4y4q4!0n7b7g2)9^5y4W2)9#2b7X3g2E0i4K6g2X3x3o6p5H3y4W2)9#2c8l9`.`.
我跑了一下xdec,我的感觉: 第一:simd的指令集是没有的,现在的很多流式的计算是靠NEON来实现的,后续还有SVE/SVE2/SME/SME2,我没有看过apple的东西不知道apple有没有sve和sve2,android上见过不少了。 第二:lift的结果不错,这个IR我想学习一下 第三:decompile的时候遇到jumptable会crash或者dead loop,这个我不知道的死循环还是没有对jumptable做识别;按道理来说,有了ir的话,jumptable识别起来很简单。 第四:disasm这个不应该这样实现,应该指的一个address,然后顺藤摸瓜的递归向下走,如果指定了数量,其实跟objdump没什么区别,可能是错误的,如果bb之间有空洞/数据/全局变量,出来的结果一定是错误的。
加油!
最后于 2026-8-16 14:17
被neocanable编辑
,原因:
能力值:
( LV1,RANK:0 )
20 楼
来了
能力值:
( LV6,RANK:90 )
21 楼
感谢分享!
能力值:
( LV2,RANK:10 )
22 楼
学习
能力值:
( LV2,RANK:10 )
23 楼
谢谢分享
能力值:
( LV1,RANK:0 )
24 楼
Thehepta
我觉得你这个说法不是完全对的,elf function 的函数边界是可以分析出来的,而且只要不是用什么内联汇编,汇编函数,裸函数这些,一般都能分析出来,比如c代码编译的函数,是符合一定的的编译规则的, ...
Thehepta大佬的意思是,IDA做完函数识别之后,对每个函数内部的指令序列拆分基本块做CFG恢复是吗?我觉得这个做法也比较合理
1. 正常代码同时受架构的ABI规约和工具链偏好,所以这块应该是有内嵌相应的pattern规则加速函数边界发现这一部分的
2. 手动把一块内存区域标记为function,函数为粒度的话这时候反汇编引擎可以只做增量反汇编,不用触发全局的重新分析
能力值:
( LV2,RANK:10 )
25 楼
mb_ririxjzk
Thehepta大佬的意思是,IDA做完函数识别之后,对每个函数内部的指令序列拆分基本块做CFG恢复是吗?我觉得这个做法也比较合理
1. 正常代码同时受架构的ABI规约和工具链偏好,所以这块应该是有 ...
首先需要知道的是function head,也就是函数头,也可能是任何一种elf/pe/macho的分析入口,这些东西是可以确定的;如果识别函数是指的这样的动作,那么没有问题。如果是指的一个function的range,那么肯定是不对了的