2020年7月1日 星期三

簡易繞過Anti-Debugger技巧

現今已有非常多的軟體會使用Anti-Debugger的技術來規避軟體被反編譯,因為如果不規避,可能會讓軟體被破解,造成公司的損失,然而惡意程式也會學習這些商業軟體的Anti-Debugger技術,如果並不熟悉這些技術,是非常困難繞過,因此我會推薦一些工具來簡單的繞過Anti-Debugger,不過並不是可以將全部的Anti-Debugger都能繞過,它的成功率大約在70%-80%左右,像是Integrity check和Debug API hooking等等,都沒辦法繞過,只能透過Try and error來分析它是如何檢測Debugger。

工具

1. x64dbg

2. ScyllaHide

測試程式碼

https://drive.google.com/file/d/1f1d9wcfEgZuCtDqMWWrhdWE0sOQHBnuF/view?usp=sharing

一、安裝ScyllaHide

ScyllaHide它是一款兼容ollydbg和x64dbg的Plugin,此工具是用來繞過Anti-Debugger。

這邊練習的範例是32 bits。

1. 將ScyllaHideX64DBGPlugin.dp32移到x64dbg的plugins裡。

2. 將HookLibraryx86.dll移到x64dbg的plugins裡。



二、Attach程式

如果沒有安裝ScyllaHide,就會被偵測到Debugger。



安裝ScyllaHide成功後,可以在Plugins裡看到ScyllaHide的選項。



在使用Attach的方法,有時候還是會出現一次被偵測到Debugger。



三、Anti-Debugger範例

在範例裡面是使用IsDebuggerPresent來偵測是否有被Debugger,因此它會從fs[18]->[eax+30]->[eax+2]來檢查此bytes是1還是0,如果是1就代表有存在Debugger,所以在Attach程式時,ScyllaHide會將它清為0,不過只要在它偵測的瞬間,還來不急修改,就可能會被偵測到。



四、拖曳程式到x64dbg

利用拖曳的方式來附加程式,就能完整的規避Anti-Debugger。