求解释,一个小函数的逆向问题
小弟刚接触逆向,最近在学也在练。问题的具体的代码,和我自己写成C语言后文件,打包上传上来
求解释.rar
(2.53 KB)
望路过大牛高手们不吝指点啊:
有个驱动文件,里面有很多东西不明白,所依RT:
问题一:
.text:0001B040 push ebp
.text:0001B041 mov ebp, esp
.text:0001B043 push 0FFFFFFFFh
.text:0001B045 push offset dword_1BAA0
.text:0001B04A push offset loc_1B8AA
.text:0001B04F mov eax, large fs:0
.text:0001B055 push eax
.text:0001B056 mov large fs:0, esp
.text:0001B05D add esp, 0FFFFFFE0h
.text:0001B060 push ebx
.text:0001B061 push esi
.text:0001B062 push edi
这段开始抬高栈底重新开一个栈,
接下来的三个压栈
.text:0001B043 push 0FFFFFFFFh
.text:0001B045 push offset dword_1BAA0
.text:0001B04A push offset loc_1B8AA
具体什么意思没看懂,既没有call调用,也没栈过渡赋值,只是一个压栈保护?但是也没见下面对这三个数据使用额。
还有做大的一个问题fs段0偏移中存储的应该是当前程序TEB结构体的地址吧?将此压栈保护后,把当前esp值放入fs:0处又什么意思啊?把TEB改成了当前的栈顶??而且又add esp, 0FFFFFFE0h将栈顶回下0FFFFFFE0h大小?但是一进行下面的压栈就把原栈内容覆盖~~似乎解释不通啊 ~~。
问题二是在结束的时候:
.text:0001B1D1 loc_1B1D1: ; CODE XREF: sub_1B040+17Cj
.text:0001B1D1 mov eax, [ebp+var_24]
.text:0001B1D4 mov ecx, [ebp+var_10]
.text:0001B1D7 mov large fs:0, ecx
.text:0001B1DE pop edi
.text:0001B1DF pop esi
.text:0001B1E0 pop ebx
.text:0001B1E1 mov esp, ebp
.text:0001B1E3 pop ebp
.text:0001B1E4 retn 8
.text:0001B1E4 sub_1B040 endp
最后
mov eax, [ebp+var_24]
mov ecx, [ebp+var_10]
mov large fs:0, ecx
fs段0偏移内容改成var_10,而var_10在整个函数过程中都没见有操作,就是一开始的定义连个初始化都没。
这句mov esp, ebp又将上面esp回下0FFFFFFE0h还原??
问题三:
.text:0001B198 jmp short loc_1B1B3
.text:0001B19A loc_1B19A: ; DATA XREF: .text:0001BAA4o
.text:0001B19A mov eax, 1
.text:0001B19F retn
.text:0001B1A0 loc_1B1A0:
这段loc_1B19A根本就没见执行到:既没有跳转过来执行,上一句是jmp断掉。不知道是我自己逆错了还是咋滴。
还有对操作平台的构架体系上有很多不明白啊~~
求方法啊~~~~~~~