真得没事做了,灌灌水吧,随意说了。

OllyDbg 有个 bug (也许不能叫 bug),遇到异常会清掉 DRx,
如果壳用DRX值来解码就会出错。这就是为什么不能直接用 OllyDbg 跟完 hying's PE-Armor 而要中途保存 DRx的原因。

TLS 的 callback 可以在程序进入入口之前执行(甚至在import被装入之前?
)但听说9x下不会。Execryptor就用这个,习惯了open with ollydbg的还得改改,麻烦啊。

令X=[GetProcessHeap+0Ch] and 40h,非调试时应该为0。

SetUnhandledExceptionHandler 会用ZwQueryProcessInformation查询class=7(可能是11,我记不清了)的调试信息,只要hook 那个native api就行了。

ZwSetInformationThread可以把调试端口设置为0,调试器就收不到debug event了。

native api都是这种形式的:
mov eax, ServiceId
mov edx, xxxxxxxx
call [edx]
retn xx
2k下大同小异:
mov eax, ServiceId
lea edx, [esp+4]
int 2e
retn xx
hying新版会扫描所有代码直到retn(并且第一条指令不能为retn),就没法设置断点了,因为它还会复制代码,memory breakpoint也不好用。不过可以用这种形式:
mov eax, ServiceId
mov edx, PtrToMyPage ;指向自己的内存
call [edx]
retn xx
执行后就可以肆意妄为了,不怕检测。更狠得可以hook SSDT(服务描述表)。

有些程序利用调试器的 bug,我们可以自己写个调试器,只具有基本的功能,
来完成脱壳不受影响。


不知道我在说什么呢。现在流行VM啊,一个opcode table把debugger搞得团团转,设计VM是体力活,解VM更是体力活,可能reverse技术发展到一定程度脱壳真地如loveboom说的走不远了。

写代码和调试的时候要听音乐,否则人真的会疯掉。

易语言这东西有前途。

一个好壳除了AntiDebug不能太软,输入表和代码处理分支要足够多,200个以上为佳。

有时间应该写个好的polymorphic engine,把drx解码嵌进去。

。。。。。。

  • 标 题: 答复
  • 作 者:shoooo
  • 时 间:2005-10-22 20:36

关于Tls CallBack 应该是Import被装入后进入
进去的时候,能在Stack中看到ep, 出来后再走走就call ep了

其实进程在ExitProcess退出的时候, 还会进一次这个CallBack
大约是在ExitProcess中的LdrShutDownProcess中进的
当然如果喜欢用int2E或sysenter退进程就不会到那个地方了