本帖最后由 吾爱扣扣 于 2014-3-9 14:06 编辑
【文章标题】: LOLLHIT破解初探
【文章作者】: 吾爱扣扣
【软件名称】: LOLLHIT
【下载地址】: 自己搜索下载
【加壳方式】: VMP
【编写语言】: VC++
【使用工具】: OD,DIE,EXEinfoPE
【操作平台】: Win7
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一直很喜欢这款LOL辅助工具,用@blmk 的话来说用了之后感觉自己跟职业选手一样NB。。
废话不多说,首先从官网下载解压就得到一个名为LLHit.exe的文件。一般的辅助都会通过向游戏注入自己的dll,从而提升权限,所以LLHit.exe内部显然隐藏玄机。
用DIE和EXEinfoPE查壳均显示为VMP加密。
由于我是老爷机,直接开LOL调试会很卡,于是我用E模拟了一个客户端。OD载入LLHit.exe,直接F9在SOD的护航下顺利运行,下好操作文件相关的API断点,他注入肯定得先释放到某处(这里注意:最好先运行再下断点,不然容易被检测!)
然后借用@blmk 提供的王者版帐号成功登录后断下,在栈中发现
[Asm] 纯文本查看 复制代码 048FE644 766AE8DF /CALL to CreateFileW from kernel32.766AE8DA
048FE648 003244C0 |FileName = "c:\program files\腾讯游戏\英雄联盟\Game\HID.dll"
048FE64C 40000000 |Access = GENERIC_WRITE
048FE650 00000000 |ShareMode = 0
048FE654 048FE6CC |pSecurity = 048FE6CC
048FE658 00000002 |Mode = CREATE_ALWAYS
048FE65C 00000080 |Attributes = NORMAL
048FE660 00000000 \hTemplateFile = NULL
于是F9让他写出HID.dll,赶紧到c:\program files\腾讯游戏\英雄联盟\Game\处把HID.dll复制了一份到桌面,接着F9有发现栈中出现
[Asm] 纯文本查看 复制代码 048FDB90 766AE8DF /CALL to CreateFileW from kernel32.766AE8DA
048FDB94 048FE0DC |FileName = "c:\program files\腾讯游戏\英雄联盟\Game\LLHit.tmp"
048FDB98 80000000 |Access = GENERIC_READ
048FDB9C 00000003 |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
048FDBA0 00000000 |pSecurity = NULL
048FDBA4 00000003 |Mode = OPEN_EXISTING
048FDBA8 00000080 |Attributes = NORMAL
048FDBAC 00000000 \hTemplateFile = NULL
于是乎又F9让他写出LLHit.tmp,同样复制一份到桌面。继续F9直到不再被断下。提示:tmp是临时数据文件的后缀
Alt+E发现LLHit.tmp被LLHit.exe加载了。于是我右键点击CPU中显示代码。然后右键查找字符串发现关键!
[Asm] 纯文本查看 复制代码 60BD72F7 mov eax,60C0BEF0 [HOME]ON/OFF | [END]ON/OFF SUPPORT ONLY | [PGUP/PGDN]ON/OFF CLEAN MODE | [CAPS LOCK]ON/OFF SPELLBOT | [SPACE]AUTO ADVBOT
60BD7304 mov eax,60C0BF6C [HOME]ON/OFF | [S]SEMI LAST HIT | [ALT]AUTO LAST HIT
60BD7345 push 60C0BFA4 enable
60BD7360 push 60C0BFAC enable
60BD73D7 push 60C0BFB4 enable
60BD7431 mov eax,60C0BFBC [LOL LAST HIT] - ON //这里肯定是在游戏中的提示啦
60BD743B mov eax,60C0BFD0 [LOL LAST HIT] - OFF
60BD7483 push 60C0BFE8 support_only
60BD74A2 push 60C0BFF8 support_only
60BD751A push 60C0C008 support_only
60BD7574 mov eax,60C0C018 [SUPPORT ONLY] - ON
60BD757E mov eax,60C0C02C [SUPPORT ONLY] - OFF
60BD75C6 push 60C0C044 spell_bot
60BD75E5 push 60C0C050 spell_bot
60BD765D push 60C0C05C spell_bot
60BD76B7 mov eax,60C0C068 [SPELLBOT] - ON
60BD76C1 mov eax,60C0C078 [SPELLBOT] - OFF
60BD771C push 60C0C08C crit_lock
60BD775E push 60C0C098 crit_lock
60BD7792 push 60C0C0A4 crit_lock
60BD77CB mov eax,60C0C0B0 [CRITLOCK] - OFF
60BD77D5 push 60C0C0C4 crit_lock
60BD780F mov eax,60C0C0D0 [CRITLOCK] - HARD LOCK
60BD7819 push 60C0C0E8 crit_lock
60BD7853 mov eax,60C0C0F4 [CRITLOCK] - ONE TIMES
60BD785D push 60C0C10C crit_lock
60BD7897 mov eax,60C0C118 [CRITLOCK] - TWO TIMES
60BD789E push 60C0C130 crit_lock
60BD78D3 mov eax,60C0C13C [CRITLOCK] - THREE TIMES
60BD7924 push 60C0C158 clean_mode
60BD796B push 60C0C164 [CLEAN MODE] - ON
60BD7995 push 60C0C178 clean_mode
60BD79C8 push 60C0C184 [CLEAN MODE] - OFF
[Asm] 纯文本查看 复制代码 60BCDD95 push 60C0B480 Akali
60BCDDEB push 60C0B488 Amumu //这些都是游戏中的人物名字
60BCDE41 push 60C0B490 Annie
60BCDE97 push 60C0B498 Ashe
60BCDEED push 60C0B4A0 Cassiopeia
60BCDF43 push 60C0B4AC Corki
60BCDF99 push 60C0B4B4 Darius
60BCDFEF push 60C0B4BC Draven
60BCE045 push 60C0B4C4 Fiora
60BCE09B push 60C0B4CC Fizz
60BCE0F1 push 60C0B4D4 Galio
60BCE147 push 60C0B4DC Gangplank
60BCE19D push 60C0B4E8 Gragas
60BCE1F3 push 60C0B4F0 Hecarim
60BCE245 push 60C0B4F8 Irelia
60BCE297 push 60C0B500 JarvanIV
60BCE2ED push 60C0B50C Jax
60BCE343 push 60C0B510 Jayce
60BCE399 push 60C0B518 Kassadin
60BCE3EF push 60C0B524 Katarina
60BCE445 push 60C0B530 Kayle
60BCE49B push 60C0B538 Kennen
60BCE4F1 push 60C0B540 KhaZix
60BCE547 push 60C0B548 KogMaw
60BCE59D push 60C0B550 LeeSin
60BCE5F3 push 60C0B558 Lucian
60BCE649 push 60C0B560 Malphite
60BCE69F push 60C0B56C Maokai
60BCE6F5 push 60C0B574 MasterYi
60BCE74B push 60C0B580 MissFortune
60BCE7A1 push 60C0B58C Mordekaiser
60BCE7F7 push 60C0B598 Morgana
60BCE84D push 60C0B5A0 Nami
60BCE8A3 push 60C0B5A8 Nasus
60BCE8F9 push 60C0B5B0 Nautilus
60BCE94F push 60C0B5BC Nidalee
60BCE9A5 push 60C0B5C4 Nocturne
60BCE9FB push 60C0B5D0 Olaf
60BCEA51 push 60C0B5D8 Orianna
60BCEAA7 push 60C0B5E0 Pantheon
60BCEAFD push 60C0B5EC Poppy
60BCEB53 push 60C0B5F4 Quinn
60BCEBA9 push 60C0B5FC Renekton
60BCEBFF push 60C0B608 Rengar
60BCEC55 push 60C0B610 Rumble
60BCECAB push 60C0B618 Sejuani
60BCED01 push 60C0B620 Shaco
60BCED57 push 60C0B628 Shen
60BCEDAD push 60C0B630 Shyvana
60BCEE01 push 60C0B638 Singed
60BCEE4C push 60C0B640 Sivir
60BCEE97 push 60C0B648 Sona
60BCEEE2 push 60C0B650 Talon
60BCEF2D push 60C0B658 Teemo
60BCEF78 push 60C0B660 Tristana
60BCEFC3 push 60C0B66C Trundle
60BCF00E push 60C0B674 Tryndamere
60BCF059 push 60C0B680 TwistedFate
60BCF0A4 push 60C0B68C Twitch
60BCF0EF push 60C0B694 Udyr
60BCF13A push 60C0B69C Urgot
60BCF185 push 60C0B6A4 Varus
60BCF1D0 push 60C0B6AC Vayne
60BCF21B push 60C0B6B4 Vi
60BCF266 push 60C0B6B8 Vladimir
60BCF2B1 push 60C0B6C4 Volibear
60BCF2FC push 60C0B6D0 Warwick
60BCF347 push 60C0B6D8 Wukong
60BCF392 push 60C0B6E0 XinZhao
60BCF3DD push 60C0B6E8 Zac
60BCF428 push 60C0B6EC Zed
60BCF473 push 60C0B6F0 Ziggs
60BCF584 mov eax,dword ptr ds:[0x60C2810C] 淬*FK展\吕`
60BCF5B6 push 60C0B994 Ahri
60BCF5FF push 60C0B99C Annie
60BCF655 push 60C0B9A4 Ashe
60BCF6AB push 60C0B9AC Caitlyn
60BCF701 push 60C0B9B4 Cassiopeia
60BCF757 push 60C0B9C0 Corki
60BCF7AD push 60C0B9C8 Draven
60BCF803 push 60C0B9D0 Elise
60BCF859 push 60C0B9D8 Ezreal
60BCF8AF push 60C0B9E0 Graves
60BCF905 push 60C0B9E8 JarvanIV
60BCF95B push 60C0B9F4 Karthus
60BCF9B1 push 60C0B9FC Lux
60BCFA07 push 60C0BA00 MissFortune
用C32打开LLHit.exe发现可PE头,于是查壳显示为VMP。然后又查了HID.dll的壳发现是UPX,所以先从他入手。
用小生的UPX静态脱壳机脱掉壳后提示有重定位,我们不管它,OD载入HID.dll,发现了更关键的一处!
[Asm] 纯文本查看 复制代码 00203528 > $ 55 push ebp
00203529 . 8BEC mov ebp,esp
0020352B . 83C4 C4 add esp,-0x3C
0020352E . B8 F8342000 mov eax,002034F8
00203533 . E8 A0FEFFFF call 002033D8
00203538 . 68 48352000 push 00203548 ; /FileName = "LLHit.tmp" //他把LLHit.tmp当作dll用LoadLibrary函数加载了!
0020353D . E8 4EFFFFFF call <jmp.&KERNEL32.LoadLibraryA> ; \LoadLibraryA
00203542 . E8 3DF9FFFF call 00202E84
00203547 . 004C4C 48 add byte ptr ss:[esp+ecx*2+0x48],cl
0020354B . 69742E 74 6D7>imul esi,dword ptr ds:[esi+ebp+0x74],0x7>
00203553 . 0000 add byte ptr ds:[eax],al
00203555 . 0000 add byte ptr ds:[eax],al
00203557 . 0000 add byte ptr ds:[eax],al
00203559 . 0000 add byte ptr ds:[eax],al
也就是说,LLHit.tmp不是什么临时数据文件,其根本就是一个加了VMP的DLL,而HID.dll则是为LLHit.tmp打掩护的工具而已!哪个文件是这款辅助的核心从加的壳就能看出来。
LLHit.tmp加的是VMP,而HID.dll却是UPX。再加上从LLHit.tmp中搜索到的字符串,很明显LLHit.tmp才是核心文件。
至此,初探完毕。 有兴趣的朋友可以IDA一下上述文件。。。。 真心很感谢@blmk 许多细节都是他发现的。
---------------------------------------------------------------------------------
感谢 @飘在未来 的指点,可是如果说HID.dll是LOL的文件那为何我脱壳后载入OD他显示的是加载LLHit.tmp呢?
--------------------------------------------------------------------------------
【版权声明】: 本文原创于吾爱扣扣, 转载请注明作者并保持文章的完整, 谢谢!
2014年03月09日 12:30:35
|