|
[求助]问个简单的问题
准确地说 $+5 != (e)IP+5 $代表汇编器当前正在汇编的地址,而(e)IP指向的是当前指令(即call指令)的下一条指令。 对32位代码,一条near call是5个字节,所以call $+5 相当于call EIP+0,机器码是0xE8, 0x00, 0x00, 0x00, 0x00 |
|
[求助]进程已经启动还没有运行是什么状况?
不知道这是哪本书上的内容,这段话我只能这么理解了: 启动是说一个进程内核对象被创建了,并且还没有被删除。 运行是说该进程处于可运行的状态(即可以被调度的状态,而不是挂起或阻塞或僵死等)。 |
|
[求助]脱UltraProtect 1.x -> RISCO Software Inc.遇到的困惑
楼上说得有道理。 用我说的方法修改壳的解码过程后,最终还有两个函数(一个是MessageBoxA,另一个是什么忘了,不过壳判断的代码就是附近,自己看一下就行)还会被加密,其它API函数指针都恢复成了本来的值,用ImportRec修复时遇到的无效指针全部是空指针,可以直接剪掉。 但是是脱壳后的程序还是无法运行,对比脱前和脱后,发现这个“壳”与“瓤”结合得很紧,基本上分不清楚哪是壳,哪是瓤。比如有很多指针变量,指向的内存区域是壳给分配,而脱壳后这些指针指向了无效的内存。 我的水平是处理不掉了。等待高人吧。 |
|
[求助]请高手解惑下,谢谢
[QUOTE=sttest;556549]; 这里就有问题了,我单步跟踪了下,esi = 0051FB98h , ;0051FB98 dword_51FB98 dd 11Ah dup(4F1008h) 这是data段相应地址的数据定义。 ;按照我的理解eax 的值应该就是数组 dword_51FB98[80h/4]的值就 ;应该等于 4F1008h ,但是 eax 的实际值却是00D525C8 ,这是为什么? [/QUOTE] 0051FB98 dword_51FB98 dd 11Ah dup(4F1008h)是IDA静态反汇编的结果,其中的值是变量的初始值。 但既然是变量,它的值就可以在运行期改变。当你用OD动态跟踪到这里时,看到的是变量当前的值。 |
|
|
|
|
|
[讨论]:p: 历史上最强的反调试,保证你们没见过,OD加载不起,附加不起,CE打开不起,建立不起
这个EXE真是好强大,一运行,楼上几位都开始说梦话了。 |
|
[求助]手工移动资源段遇到的问题!!
我把两个贴合并了。 一个section就是文件中(如果映射入内存的话,也就是内存中)的一段连续的存储区域。它的名字是什么并不重要,至于通常的.text、.data、.rsrc等命名方式完全是一种约定俗成的东西,你完全可以不用理它。 而数据目录才指出不同的数据都是什么功能。比如Resource table这个目录,指出了文件中用做“资源”的数据位于哪里。 由于通常情况下,连接器会把资源放在一个节中,并把这个节(按照习惯)命名为.rsrc,所以通常情况下你会看到Resource table恰好指向.rsrc节。 如果连接器(或人为地)把资源的节改名,比如随便改个无意义的.abc,由于改的只是这个节的“名字”,这个节里面的数据就是资源,那么Resource table也就指向这个.abc节了。 section是文件结构的范畴。一个section有名字,和属性,但名字和属性与它的功能不具有直接关系(虽然有某些限制,比如程序的代码所在的section必须具有读和执行属性)。 directory是逻辑功能的范畴。一个directory entry定义了某种功能的数据结构位于文件(及内存)中哪个位置,与某个名字的节不要求具有对应关系(虽然习惯上常存在对应,比如输入表对应名为.idata的section,资源表对应名为.rsrc的section等)。 |
|
[求助]手工移动资源段遇到的问题!!
除了修改节表之外,更重要的是需要修改数据目录。 程序是通过数据目录的内容来识别资源和各种数据的,而不是节表。 不管看什么PE格式的资料,它都会告诉你,文件的节(section,叫“节”只是个人习惯,“段”是另外一种叫法)只是把一些数据放在一起,节的名字对加载器来说是无意义的,例如一个名字叫.rsrc的节并不表明它就是一个资源的节(是以数据目录中的资源目录为准的),同理,一个名字为.text的节也不代表是代码的节(是以可选头中的BaseOfCode域为准的)。 可以做个实验,把随便一个程序的.text节改名,比如.data,而把.data改名为.text,程序照样是一个合法的PE可执行程序。 |
|
|
|
[求助]ASPack 2.12 -> Alexey Solodovnikov [Overlay]困扰
只处理了主程序,其他dll没时间看,不知道有壳没有。 Aspack是非常初级的压缩壳,一直往下走就到OEP了。 最后补一下附加数据就行了。 dumped_.zip |
|
[求助]脱UltraProtect 1.x -> RISCO Software Inc.遇到的困惑
我对壳的分析也是刚学,不敢妄言。 简单看了一下,试试这样能有没有效果: 按照你原来的方法,在idata节上下内存写入断点,F9运行后来到这里: 015CA48C 8366 0C 00 AND DWORD PTR DS:[ESI+C], 0 015CA490 03C2 ADD EAX, EDX 015CA492 8BD8 MOV EBX, EAX 015CA494 56 PUSH ESI 015CA495 57 PUSH EDI 015CA496 50 PUSH EAX 015CA497 8BF3 MOV ESI, EBX ... 往下拉,一直到这里: 015CA63A 53 PUSH EBX [COLOR="Red"]015CA63B 50 PUSH EAX[/COLOR] 015CA63C E8 8DB2FFFF CALL B.015C58CE 015CA641 8BD8 MOV EBX, EAX [COLOR="Red"]015CA643 58 POP EAX 015CA644 33C3 XOR EAX, EBX[/COLOR] 015CA646 C606 68 MOV BYTE PTR DS:[ESI], [COLOR="Red"]68[/COLOR] 015CA649 8946 01 MOV DWORD PTR DS:[ESI+1], EAX 015CA64C C746 05 8134240>MOV DWORD PTR DS:[ESI+5], [COLOR="Red"]243481[/COLOR] 015CA653 895E 08 MOV DWORD PTR DS:[ESI+8], EBX 015CA656 C646 0C C3 MOV BYTE PTR DS:[ESI+C], 0C3 015CA65A 5B POP EBX 015CA65B 8BC6 [COLOR="Red"]MOV EAX, ESI[/COLOR] 015CA65D 8385 0BF94000 0>ADD DWORD PTR SS:[EBP+40F90B], 0D 015CA664 5E POP ESI 015CA665 60 PUSHAD ... 这一段是对输入表进行处理的,其中push eax时,eax中就是API的地址。 下面的0x68是push XXXXXXXX的机器码。 也就是说,这一段代码是构造调用原来API的stub代码。(thunk??) 把 015CA644 33C3 XOR EAX, EBX 和 015CA65B 8BC6 MOV EAX, ESI 这两行全部改成nop,貌似就跳过了对导入表的处理了。 剩下的事就是走到OEP,然后用LordPE将其dump出来。 此时再用ImportRec来修复,应该可以修复了。 因为我的Windows XP x64系统,系统带的kernel32.dll和user32.dll等系统模块与32位的系统不一样,缺少很多函数,这些函数都在其它模块中实现了。这就导致ImportRec在我的机器上无法工作,所以我没办法亲自试验一下。抱歉。你先试试,如果还有问题,咱们继续讨论。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值