Archive for the ‘平台’ Category

Debug

对调试目标进程是被其他进程拉起的时候很有效果,如IE、FireFox插件。

GetKeyState的疑惑

#include "stdafx.h"
#include <Windows.h>
int main()
{
    int i = 0;
    while(1)
    {
        if(GetKeyState('A') < 0)
        {
            //VK_CONTROL
            //printf("Ctrl down: %d!\n", ++i);
            printf("A down: %d!\n", ++i);
        }
        //Sleep(1000);
    }
    return 0;
}

用GetKeyState来截获密码等好像不太实际,如果在死循环中Sleep就可能漏掉信息,如果不Sleep你会发现按一次键能得到N次这个键的信息。

疑惑是GetKeyState好像取不到WH_KEYBOARD_LL Hook后的键信息?

aliedit

最近有需要研究下支付宝的密码控件,即aliedit。谷歌百度之,发现还有驱动级别的(::>_<::)。自己动手,丰衣足食。
先看下支付宝的登录源码,其中有这样一段:alipay

OK,载体是一个ActiveX控件。不用浏览器安装这个ActiveX控件,直接从官网上下载aliedit.exe。
使用Universal Extractor将安装包解包,发现其中只有dll,看来并没有网上所说的驱动了(后面使用工具反复找也没找到驱动模块的痕迹)。
在Ring3的aliedit是如何处理键盘消息并防止被hook键盘消息的呢?
使用spy++捕捉支付宝页面的键盘消息,发现就只有aliedit控件处的键盘消息是无法捕捉到的,怀疑也是hook。
于是用工具找找hooks看,出于意料的是QQ管家、spy++等的hooks都被检查出来了,aliedit却没有(囧rz),只能看看其内部实现了。

直接用IDA打开发现IDA报警告,分析出的代码含UPX节,可能是加壳了。PEiD查壳果然,用UPX脱之,不费力。
在IDA的Imports中果然找到了SetWindowsHookEx和UnhookWindowsHookEx的引用,主要就是分析引用它们的例程了,分别是offset 0x936D和offset 0x93BC。

.text:100093A1 push 0 ; dwThreadId
.text:100093A3 push eax ; hmod
.text:100093A4 push offset fn ; lpfn
.text:100093A9 push 0Dh ; idHook
.text:100093AB call ds:SetWindowsHookExA

是一个全局的低级键盘钩子,奇怪的是我用工具没找到它的踪影——要么应该在工具中列出该钩子,要么在运行aliedit之后运行的进程中会有aliedit.dll模块。

IDA具体的分析如下:aliedit.idb(附件太大就不传了)

这里我只说说为什么会找不到aliedit的钩子。
先用OD附加打开了支付宝登录页面的IE,查看--->可执行模块中找到aliedit.dll的路径(C:\WINDOWS\system32\aliedit\2.5.0.3\aliedit.dll),用脱壳后的文件替换,然后再如上附加。
查看--->可执行模块中找到aliedit.dll的基址(07780000),查看--->内存中找到aliedit.dll的基址处,在代码节下断,然后运行。程序很快就会在aliedit.dll的领空断下来。
在0778936D(引用SetWindowsHookEx的例程)和077893BC(引用UnhookWindowsHookEx的例程)处下断,运行,总结:
aliedit控件获得焦点时会SetWindowsHookEx,反之,失去焦点时会UnhookWindowsHookEx。注意这里是aliedit控件,不是整个alipay的页面或IE。
这就解释了为什么用一般工具找不到它的hook了。

补充一个调用aliedit的测试页面:aliedit_test.html

.net反编译

Invalid number of data directories in NT header

Reflector Error:Module '…' contains zero or multiple module definitions.(没彻底明白怎么改,所以失败了,::>_<::)

XP Boot Sector1

XP.BS1即Windows XP启动分区中的第一个扇区,是继XP.MBR之后执行的代码。用老办法WinHex拷贝为新的二进制文件,debug -u反汇编之。分析了一段代码,坑爹的发现代码部分里面穿插了好多DB定义和奇怪的操作,然后就分析不下去了。我还以为是花指令或者为了填充到指定大小引起的呢。结果下午竟然用IDA折腾出来了。

IDA分析一段二进制的时候首先要确定这段二进制是代码,其次要选择好反汇编的CPU平台,最后需要在确定是代码的部分:右键--->分析指定区(不然你会看到全是DB定义,木有代码)。

先奉上我用debug -u分析的那段,虽然后面分析不下去,但前面能分析的部分大体是正确的。

XP.BS1

再奉上IDA分析过后的(需下载,并用IDA打开,就别直接点开看了)

XP.BS1(修正部分没在IDB里修正,sorry,看.txt吧)

最后方便没有IDA或想在线看IDA分析过后的(这个是从IDA文件中拷贝出来的,可以直接点开看)

XP.BS1.IDA(看后面的修正吧)

参考资料:活动分区的引导记录DBR分析加XP.MBR中的那些。

重要修正:怎么说呢,技术还很菜,难免疏漏。用bochs跟了遍,修正下.txt文档。

XP.BS1.IDA修正

无觅相关文章插件,快速提升流量