当前位置:   article > 正文

纯python实现获取sessionid(无需注入)_个非寻wechathook

个非寻wechathook

前言

原先想要获取vx的sessionid,一般都是通过注入dll的方式来实现,所以一般使用c++或者易语言编译dll的方式实现,但是这样的方式使用前还需要注入dll,容易检测出,而且编写调试过程相对麻烦,所以打算用python这个解释型语言尝试。

原理

获取sessionid需要调用相应的call,寻找call的过程就不过多叙述,这里只解释如何使用python调用这些call,主要使用的库是win32api,ctypes,keystone,其中只有keystone是第三方库,它能将汇编代码转换成机器码,然后通过win32api与ctypes将机器码写入vx的内存中,再通过远程线程调用的方式执行即可。

第一步:查看call

在这里插入图片描述
可以看到,当我们点击打开小程序的时候,程序执行完图中的两个call之后,内存窗口就出现sessionid的数据,(由于某些敏感原因,不方便放出其它dbg信息,想要交流的可以QQ:3122142139)

第二步:汇编转机器码

因为python无法直接将汇编代码写入内存,所以需要转换成机器码,keystone是第三方库,可以使用pip安装,他可以将汇编代码以字符串的形式转换成列表形式的机器码。上图中的汇编转换如下,偏移需要自己计算;

asm = '''
    pushad
    call 0x3B310A0
	call 0x3D46BD0
    popad
    ret
    '''
ks = Ks(KS_ARCH_X86, KS_MODE_32)
machine_code, _ = ks.asm(asm)     #    machine_code就是得到的机器码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

第三步:内存操作

python想要读取其他进程的内存数据,需要加载kernel32.dll,并导出内部的函数,如果有windows编程基础的就知道,我们用到的函数主要是VirtualAllocEx,WriteProcessMemory,CreateRemoteThread,ReadProcessMemory,VirtualFreeEx,流程如下:

1.VirtualAllocEx:开辟内存空间
2.WriteProcessMemory:写入机器码
3.CreateRemoteThread:远程线程调用call
4.ReadProcessMemory:读取sessionid数据
5.VirtualFreeEx:释放内存空间

#  加载kernel32.dll
kernel32 = ctypes.windll.LoadLibrary("kernel32.dll")  
#  打开进程
handle = win32api.OpenProcess(PROCESS_ALL_ACCESS, False, pid)  
#  开辟内存空间
poind = kernel32.VirtualAllocEx(int(handle), None, 100, MEM_COMMIT, PAGE_EXECUTE_READWRITE)  
#  写入机器码
byte_code = (c_char * len(machine_code))()
    for i, v in enumerate(machine_code):
        byte_code[i] = v
kernel32.WriteProcessMemory(int(handle), poind, byte_code, len(machine_code), None)
#  执行
kernel32.CreateRemoteThread(int(handle), None, 0, poind, 0, 0, None)
#  读取sessionid
kernel32.ReadProcessMemory(int(handle), SessionAdd, byref(Psessionid), 4, None)
#  释放内存
kernel32.VirtualFreeEx(int(handle), poind, None, MEM_RELEASE)
#  关闭句柄
kernel32.CloseHandle(int(handle))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

注意

上述代码中传入pid之后,就能调用相应的call生成sessionid,并直接拿到sessionid,这样做的好处在于不需要进行编译,也不需要注入dll,并且由于是通过远程线程调用的方式,开辟的内存空间最后也会释放,所以相对稳定

纯python实现获取小程序支付链接

sessionid的作用相信能看到大家都知道,下一篇我讲介绍如何通过sessionid直接获取小程序支付的链接,使用纯python实现,不需要注入。
最后想要交流学习的可以QQ:3122142139

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号