首页
社区
课程
招聘
[求助]关于远程线程调用的问题
发表于: 2014-10-30 15:53 4799

[求助]关于远程线程调用的问题

2014-10-30 15:53
4799
请问软件如果将所有的代码放到了一个新的线程中,主进程只用来创建这个线程并且销毁资源什么的工作。我在它创建了新进程后用od附加了这个线程,但是根本跟踪不到相关的代码,一开始直接附加后就定位到了一个退出代码,我修改了od的载入点之后仍旧跟不到有用的代码,请问这样的情况应该怎么调试这个线程呢?主进程里面只有几个有用的内容,一个是分配一个堆然后将关键代码放到堆中,之后创建一个新线程,不接收任何调试信息,然后是一个PostThreadMessageA函数,看名字应该是向刚刚创建的线程中发送消息,但是事实上我在它刚创建完线程后就把那个线程结束掉,主进程中也能完全正常运行不产生任何错误。。。最近看到了好几个这样的程序,请问该怎么调试它?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
就把那个线程结束掉


调的什么函数? closeHandle?
2014-10-30 18:07
0
雪    币: 7081
活跃值: (3608)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3
lz能不能整理下措词,线程跟进程是不一样的.
一会创建的线程,一会又是进程.另外OD只能附加进程的好吧.
2014-10-30 18:32
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
说的不通顺是因为我也不知道它到底干了什么,我能确定的是最后出现的是一个新的进程,但是我之所以说创建线程是因为在原代码中看到的是GetCurrentThreadId,还有一个是PostThreadMessageA,而VB(程序是VB的)中的跟创建进程相关的API都没有看到所以上面才说的有点乱,但是最后出现的是一个进程,因为能在进程管理器中查看到,原进程时CrackMe.exe,新进程是Crack Me,也确实是可以用od附加的
2014-10-30 20:11
0
雪    币: 7081
活跃值: (3608)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
5
主线程创建辅助线程然后辅助线程创建新进程?
你中断在新线程那里就行了.
2014-10-30 20:17
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不是的、我直接从它的GUI窗口上点退出的,当然里面的退出调用的API是 ntdll.RtlExitUserThread,我也试过跟到这一步,这样新进程就会退出,弹出的rtcMsgBox也就退出了。并且如果将程序载入od后取消所有断点然后F9,原进程会直接运行到退出,并不等待任何由它创建的这个新进程给出任何的反馈信息就直接终止了这个原进程的。
2014-10-30 22:37
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
请问是什么意思呢?它用于创建的是一个系统函数,这个函数跟进去看不到任何东西:
[code]
733936EB    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
733936EE    8BCB            MOV ECX,EBX
733936F0    C645 FF 01      MOV BYTE PTR SS:[EBP-1],1
733936F4    57              PUSH EDI
733936F5    E8 9B010000     CALL MSVBVM60.73393895                   ; 创建线程
733936FA    85C0            TEST EAX,EAX
733936FC    8945 08         MOV DWORD PTR SS:[EBP+8],EAX
733936FF    0F8C 5BB40100   JL MSVBVM60.733AEB60
73393705    807E 01 00      CMP BYTE PTR DS:[ESI+1],0
73393709    0F85 95B40100   JNZ MSVBVM60.733AEBA4
[code]
就是上面的那个call,如果在call的下一行下断,再看任务管理器,就会出现新进程和原进程同时存在,而且两个进程的线程数都是1,好像没有创建辅助线程一样。而再用od附加那个新的进程就会直接停在这个位置:
[code]
7C92120F    C3              RETN

7C970010   /EB 11           JMP SHORT ntdll.7C970023
7C970012   |90              NOP
7C970013   |90              NOP
7C970014   |90              NOP
7C970015   |90              NOP
7C970016   |90              NOP
7C970017   |33C0            XOR EAX,EAX
7C970019   |40              INC EAX
7C97001A   |C3              RETN
7C97001B   |90              NOP
7C97001C   |90              NOP
7C97001D   |90              NOP
7C97001E   |90              NOP
7C97001F   |90              NOP
7C970020   |8B65 E8         MOV ESP,DWORD PTR SS:[EBP-18]
7C970023   \834D FC FF      OR DWORD PTR SS:[EBP-4],FFFFFFFF
7C970027    6A 00           PUSH 0
7C970029    E8 6D140100     CALL ntdll.RtlExitUserThread
[code]
第一次暂停就停在retn,单步就走到了这个jmp的位置,中间没有任何的call和其他的调用,请问我应该怎么中断在新线程中呢?
2014-10-30 22:46
0
雪    币: 7081
活跃值: (3608)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=debaucher;1327392]请问是什么意思呢?它用于创建的是一个系统函数,这个函数跟进去看不到任何东西:
[code]
733936EB    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
733936EE    8BCB            MOV ECX,EBX
733936F0  ...[/QUOTE]

VB6生成的标准EXE是不支持多线程的.要实现多线程就只有CreateThread.但是不稳定.
你下个断点试试.
2014-10-31 00:07
0
游客
登录 | 注册 方可回帖
返回