首页
社区
课程
招聘
[求助]堆栈无法回溯的时候,应该如何继续
发表于: 2021-4-25 18:52 2990

[求助]堆栈无法回溯的时候,应该如何继续

2021-4-25 18:52
2990

跟数据加密,跟踪数据到某一层的函数头,没有找到跳转,堆栈也无法回溯调用.


应该是 

mov eax,address    

jmp eax 这种直接跳转的方法

这种情况有没有什么继续追踪.



感谢下各位的回帖

说下分析后续:


程序是ASProtect 1.2x - 1.3x [Registered] 脱壳后能运行,不过功能不太正常,所以带壳调试.其中被保护的代码,脱壳前后没什么变化.

倒着追的时候因为无法回溯,所以只好正着追.

未加密数据被拷贝一份后,弹出一个字节到[esp]里,之后就会进入被保护的代码,其中有进入锁

lock cmpxchg dword ptr ds:[edi+0x30],ecx 

后续会有非常多运算代码 及交叉跳转,对堆栈的修改操作 比如下面代码

sub al,cl

pop cx

sub al,0xAF

add al,bl

add al,0xAF

pop edx

push ebx

push dword ptr ss:[esp]

jmp 32350956

mov cx,word ptr ss:[esp]

push ebx

jmp 32352AAD

push dword ptr ss:[esp]

pop ecx

push edx

push esp

pop edx

add edx,0x4

add edx,0x4

xchg dword ptr ss:[esp],edx

jmp 323533B6


直接自动后会一直到弹出异常. 猜测这里是靠异常返回,然后其他线程进入锁.

不知道是什么原因 ,对锁里面访问的内存地址下断,一直到附近的数据段,程序又会异常,后续还需要继续分析.



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2021-4-26 14:12 被ffggddss编辑 ,原因: 后续分析
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 4359
活跃值: (4338)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一样可以回到函数调用段.

因为 mov eax,address  在函数里面  就能回到调用该处代码的函数头

CALL AAAAAAA

AAAAAAA:

push ebp
....
mov eax,address
jmp eax


在 address 处下断至少能追到   CALL AAAAAAA 
2021-4-25 20:26
0
雪    币: 2726
活跃值: (1110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Mxixihaha 一样可以回到函数调用段. 因为 mov eax,address 在函数里面 就能回到调用该处代码的函数头 CALL AAAAAAA AAAAAAA: push ebp . ...
堆栈里附近几个地址下断 都没有断到.... 
2021-4-26 00:24
0
雪    币: 9057
活跃值: (1615)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
无法回溯通常有壳,或者代码在搞鬼,如动态申请内存,释放代码,执行完就释放内存…这时就无法回溯了…
2021-4-26 06:32
1
雪    币: 4359
活跃值: (4338)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
ffggddss 堆栈里附近几个地址下断 都没有断到....

如果是VM保护的话请按照对应VM引擎设计的方式方法下断.    如果是标准的程序请确保你的断点处是在 address 的代码区域,结合分配的堆栈空间大小定位(如 esp 的 add/sub).



如果不能确定 address 的范围,就合理的找出两个断点的地方 把 address 夹在中间. 用最近距离的断点 Trace 出 address

最后于 2021-4-26 07:54 被Mxixihaha编辑 ,原因:
2021-4-26 07:52
2
游客
登录 | 注册 方可回帖
返回
//