|
[求助]一无所知的小白能否在这里破蛹成蝶
当你对大牛做的东西有一点了解之后,就会想放弃了,我发现人和人之间的区别,不只在于别人天分好的多,更在于毅力比自己强得多。反正我是老是想放弃。 |
|
[求助]请问下武汉有没有搞逆向的公司招人
我也觉得,可能会先找个写代码的工作吧,不过现在还多都是写java手机什么的,没有兴趣啊。 |
|
学脱壳 谁来说说我又浮躁了
yingyue前辈,我是你的粉丝! 之前你告诉我怎么分析aspr,不过我还是没有分析出来。虽然按照教程贴,能修复好IAT,但是原理始终不能理解,看到别人的帖子都是一带而过,自己分析不清。在处理IAT的那段循环,仔细看了下,类似 00AA6D44 8A07 mov al, [edi] 00AA6D46 8D0440 lea eax, [eax+eax*2] 00AA6D49 8B6C83 68 mov ebp, [ebx+eax*4+68] 00AA6D4D 8BC6 mov eax, esi 00AA6D4F FFD5 call ebp ebp的地方,里面有大量的混淆指令,即不是简单的花指令也不是vm,很难分析,手动还原了几个小时就放弃了,容易出错,而且混淆的太多了,这种call还有几个。这种情况应该怎么办呢,只去观察参数和返回值,感觉看不出任何意义啊。 后来研究了下armadillo,这个壳起初的帖子(3.77版)全是强制解压子进程的代码,然后修复。后来fly的帖子(4.40版本)在父进程准备调试子进程的时候就分离,让od挂上,patch掉IAT的处理,修改一个call的参数,让页面解压,然后是修复cc断点。 是不是4.40版本对前一种强制解压的处理方法加入了反调试,我用强制解压的方法测试4.40,一分离就挂了。分离之后看到子进程的代码,就能学习脚本了,但是还是不知道是反调试存在,还是4.40我强制解压出现错误。不过强制解压在子进程oep处的代码是没有问题的,可能存在反调试的代码在一个线程函数中,分析不清。。 |
|
写了个OD脚本,不大好用,好像思路错了。。
这种情况好像应该用内存访问断点吧,找了下没发现内存访问断点怎么写脚本。但是有没有反调试就不知道了,内存断点反调试要使用VirtualProtect用sod能过,其他的反调试就不知道了,反正我之前跟armadillo的时候,被他的内存断点反调试弄吐了,有一些地方用不了,而且不是用VirtualProtect这种的。 |
|
[求助]请问下这是什么反调试
这个是反硬件断点保护,不是简单的清零,dr7=0x155,4个drx都用上了,但是写的值是0,我觉得无意义,按理简单清零应该drx7直接写0。 __asm { xor eax,eax; cdq; push e_handler; push dword ptr fs:[eax]; mov fs:[eax],esp; int 3; hwbp1: nop hwbp2: nop hwbp3: nop hwbp4: nop div edx nop pop dword ptr fs:[0] add esp,4 cmp al,4; jne rt_label; jmp rf_label; e_handler: xor eax,eax; ;ExceptionRecord mov ecx,dword ptr[esp+0x04] ;Contextrecord mov edx,dword ptr[esp+0x0c] ;ContextEIP inc byte ptr[edx+0xb8]; ;ExceptionCode mov ecx,dword ptr[ecx]; ;1.EXCEPTION_INT_DIVIDE_BY_ZERO cmp ecx,0xc0000094; jne Ex_next2; ;Context_eip inc byte ptr[edx+0xb8]; mov dword ptr[edx+0x04],eax;dr0 mov dword ptr[edx+0x08],eax;dr1 mov dword ptr[edx+0x0c],eax;dr2 mov dword ptr[edx+0x10],eax;dr3 mov dword ptr[edx+0x14],eax;dr6 mov dword ptr[edx+0x18],eax;dr7 ret ;2.EXCEPTION_BREAKPOINT Ex_next2: cmp ecx,0x80000003; jne Ex_next3; mov dword ptr[edx+0x04],offset hwbp1;dr0 mov dword ptr[edx+0x08],offset hwbp2;dr1 mov dword ptr[edx+0x0c],offset hwbp3;dr2 mov dword ptr[edx+0x10],offset hwbp4;dr3 mov dword ptr[edx+0x18],0x155;dr7 ret ;3.EXCEPTION_SINGLE_STEP Ex_next3: cmp ecx,0x80000004 jne rt_label ;CONTEXT_Eax inc byte ptr[edx+0xb0] ret }by shellwolf 这个才是用到了0x155,相当于改变了程序流程,记录程序自己踩到自己设的硬件断点次数。 单独清零drx0~drx3,然后把drx7莫名其妙的写成0x155,感觉无意义,但是armadillo是这么做的。 好像对硬件断点的检测是我自己弄错了,我自己写了个玩具插件恢复drx的值的时候掉了一句话,所以出问题了,我还以为是反调试。但是内存断点还是不明白什么原理。有一个异常处理很复杂,看不懂。还用到了Unwind。 c++写SEH程序用到了try except关键字(我也不明白),但是实际上这是很复杂的宏来转换的,SEH只有汇编形式的demo才容易看请。c++没试过。 |
|
[求助]请问下这是什么反调试
仔细想了下,可能不是反调试的问题,对SetThreadContext这类函数用到的堆栈内存下断点,是不会断下来的。内存断点会挂掉,硬件断点没反应。drx7=0x155,可以百度到原理,说的是有的调试器无法处理程序本身设置的硬件断点,但是前提是前面4个drx都是写的代码的地址,触发单步异常然后捕获,这里对前面4个drx的处理只是清零,这一点不明白。另外不是虚拟机的问题,不进入这个处理,完全正常运行。对于双变单,刚才看了下剩下的教程贴,有的版本是子进程自己解压然后自己加密,然后被父进程调试解压,调试加密,可能单变双patch的是这个。 |
|
[求助]请问下这是什么反调试
还有一个我一直想不通的问题。就是,为什么这个壳可以双变单,不是异常之后就调试解密吗。双变单是在解密页面之前就变了。patch几个点就能解密是什么原理啊。那他原本的调试运行不就没有意义了吗。最开始的研究都是强制解密之后再脱离。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值