如果在IDA中去掉这种花指令干扰?

在学习逆向的过程中,遇到了一个很感兴趣的app. 查看其中一段函数的时候,发现有花指令干扰。导致ida无法正确的找到函数的结尾。请问如何能使IDA更正?
我下面贴出代码,和我打算实施的做法.

__text:00000001032C0B38     ; =============== S U B R O U T I N E =======================================
__text:00000001032C0B38
__text:00000001032C0B38     ; Attributes: bp-based frame
__text:00000001032C0B38
__text:00000001032C0B38     sub_1032C0B38      ; CODE XREF: sub_1032D58F4+90↓p 函数开始
__text:00000001032C0B38
__text:00000001032C0B38     var_70          = -0x70
__text:00000001032C0B38     var_60          = -0x60
__text:00000001032C0B38     var_50          = -0x50
__text:00000001032C0B38     var_40          = -0x40
__text:00000001032C0B38     var_30          = -0x30
__text:00000001032C0B38     var_s0          =  0
__text:00000001032C0B38
__text:00000001032C0B38 000                 SUB             SP, SP, #0x30
__text:00000001032C0B3C 030                 STP             X29, X30, [SP,#0x20+var_s0]
__text:00000001032C0B40 030                 ADD             X29, SP, #0x20
__text:00000001032C0B44 030                 MOV             W8, #0x2340
__text:00000001032C0B48 030                 MOV             W9, #0x3450
__text:00000001032C0B4C 030                 MOV             W10, #0x4560
__text:00000001032C0B50 030                 SUB             SP, SP, #0x50
__text:00000001032C0B54 080                 STP             X29, X30, [SP,#0x70+var_30]
__text:00000001032C0B58 080                 STP             X0, X1, [SP,#0x70+var_70]
__text:00000001032C0B5C 080                 STP             X2, X3, [SP,#0x70+var_60]
__text:00000001032C0B60 080                 STP             X4, X5, [SP,#0x70+var_50]
__text:00000001032C0B64 080                 STP             X6, X7, [SP,#0x70+var_40]
__text:00000001032C0B68 080                 BL              sub_1032C0B78
__text:00000001032C0B6C 080                 MOV             X1, X0
__text:00000001032C0B70 080                 ADD             X1, X1, #0x38
__text:00000001032C0B74 080                 BR              X1 ; 跳到地址00000001032C0BA4
__text:00000001032C0B74     ; End of function sub_1032C0B38
__text:00000001032C0B74
__text:00000001032C0B78
__text:00000001032C0B78     ; =============== S U B R O U T I N E =======================================
__text:00000001032C0B78
__text:00000001032C0B78
__text:00000001032C0B78     sub_1032C0B78   ; CODE XREF: sub_1032C0B38+30↑j  这应该是一个干扰代码段,用汇编写的
__text:00000001032C0B78
__text:00000001032C0B78     var_10          = -0x10
__text:00000001032C0B78
__text:00000001032C0B78 000                 SUB             SP, SP, #0x10
__text:00000001032C0B7C 000                 STP             X29, X30, [SP]
__text:00000001032C0B80 000                 LDR             X0, [SP,#8]
__text:00000001032C0B84 000                 LDP             X29, X30, [SP]
__text:00000001032C0B88 000                 ADD             SP, SP, #0x10
__text:00000001032C0B8C 000                 RET
__text:00000001032C0B90 000                 SUB             SP, SP, #0x40
__text:00000001032C0B94 040                 STP             X29, X30, [SP,#0x40+var_10]
__text:00000001032C0B98 040                 B               sub_1032C0B78
__text:00000001032C0B9C 040                 SVC             0x80
__text:00000001032C0BA0 040                 ADD             SP, SP, #0x50
__text:00000001032C0BA0     ; End of function sub_1032C0B78
__text:00000001032C0BA4     ; =============== S U B R O U T I N E =======================================
__text:00000001032C0BA4
__text:00000001032C0BA4
__text:00000001032C0BA4     sub_1032C0BA4                           ; CODE XREF: sub_1032C0B78+20↑p
__text:00000001032C0BA4
__text:00000001032C0BA4     arg_0           =  0
__text:00000001032C0BA4     arg_8           =  8
__text:00000001032C0BA4     arg_10          =  0x10
__text:00000001032C0BA4     arg_20          =  0x20
__text:00000001032C0BA4     arg_30          =  0x30
__text:00000001032C0BA4     arg_40          =  0x40
__text:00000001032C0BA4     arg_60          =  0x60
__text:00000001032C0BA4
__text:00000001032C0BA4 000                 LDP             X6, X7, [SP,#arg_30]
__text:00000001032C0BA8 000                 LDP             X4, X5, [SP,#arg_20]
__text:00000001032C0BAC 000                 LDP             X2, X3, [SP,#arg_10]
__text:00000001032C0BB0 000                 LDP             X0, X1, [SP,#arg_0]
__text:00000001032C0BB4 000                 LDP             X29, X30, [SP,#arg_40]
__text:00000001032C0BB8 000                 ADD             SP, SP, #0x50
__text:00000001032C0BBC 000                 STR             X8, [SP,#arg_8]
__text:00000001032C0BC0 -50                 ADD             X8, X0, X9
__text:00000001032C0BC4 -50                 ADD             X9, X10, W1,UXTW
__text:00000001032C0BC8 -50                 ADR             X0, sub_1032C27A0
__text:00000001032C0BCC -50                 STP             X8, X9, [SP,#-0x50+arg_60]
__text:00000001032C0BD0 -50                 SUB             SP, SP, #0x40
__text:00000001032C0BD4 -10                 STP             X29, X30, [SP,#-0x10+arg_40]
__text:00000001032C0BD8 -10                 STP             X0, X1, [SP,#-0x10+arg_10]
__text:00000001032C0BDC -10                 STP             X3, X2, [SP,#-0x10+arg_20]
__text:00000001032C0BE0 -10                 STP             X7, X6, [SP,#-0x10+arg_30]
__text:00000001032C0BE4 -10                 BL              sub_1032C0BF0
__text:00000001032C0BE8 -10                 ADD             X1, X0, #0x34
__text:00000001032C0BEC -10                 BR              X1
__text:00000001032C0BEC     ; End of function sub_1032C0BA4
__text:00000001032C0BEC

动态符号执行了解一下,论坛之前有过类似贴子: 如何对抗ollvm代码混淆?
经典的工具是miasm框架的符号执行;较新的符号执行工具有Tritonangr;还有基于unicorn的:Unicorn在Android 的应用

楼主是怎么做的?恢复真实的函数流程,直接在IDA里模拟吗?

符号执行不是干这个的…一般对于花指令处理方式是观察花指令规律然后写ida脚本patch

1 个赞

哦,明白了,符号执行只是确定各代码块之间的先后关系,但是一些花指令(比如虚假控制流)会导致符号执行陷入死循环。

一学习就拿抖音来学习啊,紫薯布丁