IDA 7.0(免费软件)自动分析陷入循环

逆向工程 艾达 部件 去混淆
2021-06-21 00:00:16

我正在尝试创建一个图表,以便我可以在我感兴趣的游戏中可视化特定功能的流程。我最初使用 Cheat Engine 来跟踪该功能的流程,但经过大约 20 jmps 到最终进入 ret 指令,我决定在 IDA 中打开可执行文件,以便我可以看到图形视图。

当我在 IDA 中打开可执行文件时,我遇到了一个问题,即自动分析“卡住”在一个循环中,永远无法完成。

查看代码,我确实想知道是否存在某种混淆,因为似乎同一件事可以用更少的指令编码。

我该怎么办?

这是我怀疑导致问题的一段代码的示例(对不起,如果我的评论没有多大意义):

cmp [rcx],rdi             ; if *rcx == rdi:
cmove eax,r15d            ; do eax = r15d
add rcx,08                ; rcx += 8
dec rdx                   ; i -= 1
mov [rsp-08],rbp          ; var a = rbp
lea rsp,[rsp-08]          ; rsp = &a
mov rbp,game.exe+13139A0  ; rbp = game.exe+13139A0
xchg [rsp],rbp            ; swap(a, rbp) i.e.
                          ;   a = game.exe+13139A0
                          ;   rbp = rbp (original value)
lea rsp,[rsp-08]          ; var b; rsp = &b
mov [rsp],rbx             ; b = rbx
lea rsp,[rsp-08]          ; var c; rsp = &c
mov [rsp],rax             ; c = rax
mov rbx,[rsp+10]          ; rbx = a
mov rax,game.exe+1313990  ; rax = game.exe+1313990
cmovne rbx,rax            ; rbx = i == 0 ? rax : rbx
mov [rsp+10],rbx          ; a = rbx
lea rsp,[rsp+08]          ; rsp = &b
mov rax,[rsp-08]          ; rax = c
mov rbx,[rsp]             ; rbx = b
lea rsp,[rsp+08]          ; rsp = &a
lea rsp,[rsp+08]          ; rsp = &???
jmp qword ptr [rsp-08]    ; jmp a i.e.
                          ;   i == 0: game.exe+1313990
                          ;   i != 0: game.exe+13139A0
1个回答

取消定义导致自动分析卡住的代码段通常会有所帮助。自动分析完成后,您可以随时返回到该部分并再次对其进行编码。