喵 。。。。
第一次 逆向 第一次逆向成功 好鸡冻!!!
想我在七年级失恋之后。。一心的愤怒,(被甩)我下决心盗她的qq复仇!!!一不小心就坚持了这么多年(不到3年),现在我已经无所谓了,但是 我还为技术奋斗!!
这几两三天我 天天偷玩电脑 逆向qq 终于今天 成功了,表示 可以记录 密码!!!!!
直接上图片 :该死的qq截屏竟然没有?
好吧 。。
接下来让我给大家分析一下 ,我菜虫一个,方法可能有点笨。。高手勿喷!!!
以前看人家用API HOOK 拦截 GetFor什么的函数 一键废除掉老版本qq的保护,但是我上周下载了最新版qq,这个方法已经不能用了, 为什么呢?
可能qq把输入密码过程放在了回调函数中,你让我不下钩子,那就我让你输不进去密码!!
好吧,破解从现在开始。
因为qq加了驱动保护,所以调试根本断不下来,那只能用RemovQQProtect了,在此感谢 这个工具作者,方便了我调试。
干掉驱动保护之后,我下断GetFor什么的函数,断是断下了 我让他返回0,结果密码框和窗体都卡主了,没有反应。。
顺便说一下qq的进程都有什么,一个QQProtect.exe 两个QQ.exe,qq.exe是同一个文件,他们的创建顺序我就不说了,我说下他们的功能,QQProtect.exe 废物一个,丢在一边。
两个qq.exe怎么办??
其实他们一个是窗体 一个是密码框,窗体的标题是“QQ2013”密码框的标题是一长串字符。我直接上图!
要调试的就只是这个进程,也就是密码框。
断GetFor什么的函数没有作用,那么我断了SetWindowsHook 这个函数,(有驱动断不下)。
查看堆栈 发现设置的是13号,也就是低级键盘钩子, 来到返回地址。我把调用 SetWindowsHook 的函数 从头复制到 Call SetWindowsHook 的地方。这个函数 加了花,这个花其实是我第一次看到的,原理就是在正常指令中间 加上几个垃圾字符 改变了 后面的指令,然后一个JMP 或者CALL 到一条 “正常指令”中间,继续执行 原来的指令。我把垃圾字符换成了CC 也就是 int 3.
----------------------------------------------邪恶的分割线----------------------------------------
003CF9C8 55 PUSH EBP
003CF9C9 8BEC MOV EBP,ESP
003CF9CB 81EC 98000000 SUB ESP,98
003CF9D1 56 PUSH ESI
003CF9D2 51 PUSH ECX
003CF9D3 E8 04000000 CALL 003CF9DC
003CF9D8 CC INT3
003CF9D9 CC INT3
003CF9DA EB 10 JMP SHORT 003CF9EC
003CF9DC 59 POP ECX
003CF9DD EB 02 JMP SHORT 003CF9E1
003CF9DF 50 PUSH EAX
003CF9E0 CC INT3
003CF9E1 83C1 02 ADD ECX,2
003CF9E4 EB 02 JMP SHORT 003CF9E8
003CF9E6 ^ 76 90 JBE SHORT 003CF978
003CF9E8 51 PUSH ECX
003CF9E9 C3 RETN
003CF9EA CC INT3
003CF9EB CC INT3
003CF9EC 59 POP ECX
003CF9ED C745 FC F8E93C0>MOV DWORD PTR SS:[EBP-4],3CE9F8
003CF9F4 51 PUSH ECX
003CF9F5 E8 06000000 CALL 003CFA00
003CF9FA CC INT3
003CF9FB CC INT3
003CF9FC CC INT3
003CF9FD CC INT3
003CF9FE EB 10 JMP SHORT 003CFA10
003CFA00 59 POP ECX
003CFA01 EB 02 JMP SHORT 003CFA05
003CFA03 50 PUSH EAX
003CFA04 CC INT3
003CFA05 83C1 04 ADD ECX,4
003CFA08 EB 02 JMP SHORT 003CFA0C
003CFA0A ^ 76 90 JBE SHORT 003CF99C
003CFA0C 51 PUSH ECX
003CFA0D C3 RETN
003CFA0E CC INT3
003CFA0F CC INT3
003CFA10 59 POP ECX
003CFA11 C785 68FFFFFF 9>MOV DWORD PTR SS:[EBP-98],94
003CFA1B 51 PUSH ECX
003CFA1C E8 06000000 CALL 003CFA27
003CFA21 CC INT3
003CFA22 ^ 7F 88 JG SHORT 003CF9AC
003CFA24 8F ??? ; 未知命令
003CFA25 EB 10 JMP SHORT 003CFA37
003CFA27 59 POP ECX
003CFA28 EB 02 JMP SHORT 003CFA2C
003CFA2A 50 PUSH EAX
003CFA2B CC INT3
003CFA2C 83C1 04 ADD ECX,4
003CFA2F EB 02 JMP SHORT 003CFA33
003CFA31 ^ 76 90 JBE SHORT 003CF9C3
003CFA33 51 PUSH ECX
003CFA34 C3 RETN
003CFA35 CC INT3
003CFA36 CC INT3
003CFA37 59 POP ECX
003CFA38 8B75 FC MOV ESI,DWORD PTR SS:[EBP-4]
003CFA3B 8D85 68FFFFFF LEA EAX,DWORD PTR SS:[EBP-98]
003CFA41 50 PUSH EAX
003CFA42 FF56 30 CALL DWORD PTR DS:[ESI+30]
003CFA45 51 PUSH ECX
003CFA46 E8 04000000 CALL 003CFA4F
003CFA4B CC INT3
003CFA4C CC INT3
003CFA4D EB 10 JMP SHORT 003CFA5F
003CFA4F 59 POP ECX
003CFA50 EB 02 JMP SHORT 003CFA54
003CFA52 50 PUSH EAX
003CFA53 CC INT3
003CFA54 83C1 02 ADD ECX,2
003CFA57 EB 02 JMP SHORT 003CFA5B
003CFA59 ^ 76 90 JBE SHORT 003CF9EB
003CFA5B 51 PUSH ECX
003CFA5C C3 RETN
003CFA5D CC INT3
003CFA5E CC INT3
003CFA5F 59 POP ECX
003CFA60 83BD 78FFFFFF 0>CMP DWORD PTR SS:[EBP-88],2
003CFA67 0F85 15010000 JNZ 003CFB82
003CFA6D 51 PUSH ECX
003CFA6E E8 06000000 CALL 003CFA79
003CFA73 CC INT3
003CFA74 ^ 7F 88 JG SHORT 003CF9FE
003CFA76 8F ??? ; 未知命令
003CFA77 EB 10 JMP SHORT 003CFA89
003CFA79 59 POP ECX
003CFA7A EB 02 JMP SHORT 003CFA7E
003CFA7C 50 PUSH EAX
003CFA7D CC INT3
003CFA7E 83C1 04 ADD ECX,4
003CFA81 EB 02 JMP SHORT 003CFA85
003CFA83 ^ 76 90 JBE SHORT 003CFA15
003CFA85 51 PUSH ECX
003CFA86 C3 RETN
003CFA87 CC INT3
003CFA88 CC INT3
003CFA89 59 POP ECX
003CFA8A 6A 00 PUSH 0
003CFA8C 6A 00 PUSH 0
003CFA8E FF56 28 CALL DWORD PTR DS:[ESI+28]
003CFA91 8B4E 6C MOV ECX,DWORD PTR DS:[ESI+6C]
003CFA94 50 PUSH EAX
003CFA95 51 PUSH ECX
003CFA96 6A 02 PUSH 0D
003CFA98 FF56 3C CALL DWORD PTR DS:[ESI+3C] USER32.SetWindowsHookExA
----------------------------------------------邪恶的分割线----------------------------------------
看到了003CFA96 6A 02 PUSH 0D 这一行,我邪恶的笑了。。
你特么不让我屏蔽你下hook,那我就让你下个错的 。。。
我小手一动 悄悄把PUSH 0D 换成了 PUSH 2,嘿嘿 我让你落后我的执行!
改掉SetWindowsHookExA的参数之后,我发现程序运行错误。。
草!
我继续进行F7,发现了两个检测代码
----------------------------------------------第一个邪恶的分割线----------------------------------------
PUSH ECX
RETN
MOV DWORD PTR DS:[ECX+FC5D8959],ECX
MOV EBX,DWORD PTR SS:[EBP+10]
MOV EAX,10
LEA ESI,DWORD PTR SS:[EBP-A8]
CMP EAX,DWORD PTR DS:[EBX]
JE SHORT 003CF41C
----------------------------------------------第一个邪恶的分割线----------------------------------------
----------------------------------------------第二个邪恶的分割线----------------------------------------
PUSH ECX
RETN
MOV DWORD PTR DS:[ECX+5DB859],ECX
ADD BYTE PTR DS:[EAX],AL
LEA ESI,DWORD PTR SS:[EBP-4C]
CMP EAX,DWORD PTR DS:[EBX]
JE SHORT 003CF66A
----------------------------------------------第二个邪恶的分割线----------------------------------------
好这样 ,基本就算是完了,我NOP掉
CMP EAX,DWORD PTR DS:[EBX]
JE SHORT 003CF41C
和
CMP EAX,DWORD PTR DS:[EBX]
JE SHORT 003CF66A
之后,txqq彻底废了。
为了方便下次调试我把这两个 硬编码也贴出来
----------------------------------------------第一个邪恶的分割线----------------------------------------
MOV EBX,DWORD PTR SS:[EBP+10]
MOV EAX,10
----------------------------------------------第一个邪恶的分割线----------------------------------------
----------------------------------------------第二个邪恶的分割线----------------------------------------
PUSH ECX
RETN
MOV DWORD PTR DS:[ECX+5DB859],ECX
ADD BYTE PTR DS:[EAX],AL
LEA ESI,DWORD PTR SS:[EBP-4C]
CMP EAX,DWORD PTR DS:[EBX]
----------------------------------------------第二个邪恶的分割线----------------------------------------
好吧,键盘记录器怎么写我就不说了吧??其实就是搜一下 该一下就行了,待会我会上传注入器。
我又一次邪恶的笑了
我该好内存,打开我写的低级键盘钩子,嘻嘻,我输入了一个密码,结果tm的 记录了一大串密码!!
我想起了qq的模拟键盘。。。
好吧。。
我又打开了我的时钟版键盘记录器,就特么的,就特么的 马化腾 应该生气了!
另外我上次了时钟记录器好低级键盘钩子记录器,RemoveQQProtect,和输入法注入工具,表示我没有写废除保护程序, 恩,我菜虫,高手勿喷。。欢迎加我好友 进行交流!!
恩 结束了
在最后 ,祝贺自己马上 16岁,我生日 8月27.。
我把这篇文章 送给我的 16岁, 也送给看雪的朋友们!
谢谢你耐心看完,,
[课程]Linux pwn 探索篇!