最近研究一个带USB加密狗的程序,使用的是OllyDbg1.10动态跟踪到读狗
的地方,也就是DeviceIoControl,大体猜此函数与驱动程序.sys打交道。
于是用IDA5.0(一直未能成功让SoftICE以Boot方式启动)静态分析xxxxxx.sys,xxxxxxUSB.sys文件(未能搞明白为什么会有两个差不多的
.sys,前者大小22K,后者13K),发现前者74个函数,后者47个函数。
DeviceIoControl函数是如何与驱动程序衔接的?
如何才能知道DeviceIoControl之后,运行的是驱动程序中的哪个函数?
第一发贴,第一破解,表达有不尽人意的地方,请各位海涵。
DeviceIoControl调用如下
00499828 |. 6A 00 PUSH 0 ; /pOverlapped = NULL
0049982A |. 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] ; |
0049982D |. 52 PUSH EDX ; |pBytesReturned
0049982E |. 6A 02 PUSH 2 ; |OutBufferSize = 2
00499830 |. 8D55 EE LEA EDX,DWORD PTR SS:[EBP-12] ; |
00499833 |. 52 PUSH EDX ; |OutBuffer
00499834 |. 6A 28 PUSH 28 ; |InBufferSize = 28 (40.)
00499836 |. 8D55 8F LEA EDX,DWORD PTR SS:[EBP-71] ; |
00499839 |. 52 PUSH EDX ; |InBuffer
0049983A |. 50 PUSH EAX ; |IoControlCode => A410E400
0049983B |. A1 C0E46600 MOV EAX,DWORD PTR DS:[66E4C0] ; |
00499840 |. 50 PUSH EAX ; |hDevice => 00000150
00499841 |. E8 7AE4F6FF CALL <JMP.&kernel32.DeviceIoControl> ; \DeviceIoControl
注:通过IoControlCode参数大家应该知道是哪个狗了,这仅仅是为了学习,并无恶意。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)