中国星际RPG联盟

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4458|回复: 1
打印 上一主题 下一主题

19号中文化4.13版本 MemoryLoadlibrary

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-22 23:51:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include "mmsystem.h"

  4. #define PINT int *
  5. #define FASTCALL __fastcall
  6. #pragma pack(1)

  7. typedef struct
  8. {
  9.     DWORD Unused0;
  10.     DWORD Text;//1
  11.     DWORD Code;//2
  12.     DWORD Unused2;//
  13.     DWORD Address;
  14.     DWORD Value;
  15.     USHORT Operator;
  16. } *ActionParams;

  17. typedef void *HANDLE;

  18. const FARPROC (WINAPI**sc_GetProcAddress) ( HMODULE hModule, LPCSTR lpProcName ) = (const FARPROC(WINAPI**)(HMODULE,LPCSTR))0x4ED160;
  19. char* (FASTCALL*GetResString)(USHORT index) = (char*(FASTCALL*)(USHORT))0x448880;
  20. DWORD (WINAPI**sc_LoadLibrary)(LPCSTR) = (DWORD(WINAPI**)(LPCSTR))(0x4ED15C);
  21. void (WINAPI**sc_FreeLibrary)(DWORD) = (void(WINAPI**)(DWORD))(0x4ED138);
  22. BOOL (WINAPI**sc_VirtualProtect)(DWORD, DWORD, DWORD, DWORD *) = (BOOL(WINAPI**)(DWORD, DWORD, DWORD, DWORD *))0x5D171358;
  23. //void * (WINAPI**sc_VirtualAlloc)(void *, SIZE_T, DWORD, DWORD) = (void *(WINAPI**)(void *, SIZE_T, DWORD, DWORD))0x004ED127;

  24. FILE *(*sc_fopen)(LPCSTR,LPCSTR)=(FILE *(*)(LPCSTR,LPCSTR))(0x77C0F010/*0x7C02AE09*/);
  25. int(*sc_fwrite)(void*,DWORD,DWORD,FILE*)=(int(*)(void*,DWORD,DWORD,FILE*))(0x77C1173B/*0x7C02CF72*/);
  26. int(*sc_fclose)(FILE*)=(int(*)(FILE*))(0x77C10AB1/*0x7C01441F*/);
  27. void *(*sc_malloc)(DWORD)=(void *(*)(DWORD))(0x77BFC407);
  28. void (*sc_free)(void *)=(void (*)(void *))(0x77BFC21B);

  29. BOOL(WINAPI**sc_SFileOpenArchive)(char *archivename, DWORD dwPriority, DWORD dwFlags, HANDLE *handle)=(BOOL(WINAPI**)(char *archivename, DWORD dwPriority, DWORD dwFlags, HANDLE *handle))0x4ED2BC;
  30. BOOL(WINAPI**sc_SFileOpenFile)(char *filename, HANDLE *handle) = (BOOL(WINAPI**)(char *filename, HANDLE *handle))0x4ED364;
  31. BOOL(WINAPI**sc_SFileCloseFile)(HANDLE hFile) = (BOOL(WINAPI**)(HANDLE hFile))0x4ED360;
  32. BOOL(WINAPI**sc_SFileCloseArchive)(HANDLE hArchive) = (BOOL(WINAPI**)(HANDLE hArchive))0x4ED2C0;
  33. long(WINAPI**sc_SFileGetFileSize)(HANDLE hFile, LPDWORD lpFileSizeHigh) = (long(WINAPI**)(HANDLE hFile, LPDWORD lpFileSizeHigh))0x4ED358;
  34. BOOL(WINAPI**sc_SFileOpenFileEx)(HANDLE handle, char *filename, char mode, HANDLE *result) =(BOOL(WINAPI**)(HANDLE handle, char *filename, char mode, HANDLE *result))0x4ED368;
  35. BOOL(WINAPI**sc_SFileReadFile)(HANDLE hFile, void *buffer, DWORD nNumberOfBytesToRead, DWORD*, DWORD) = (BOOL(WINAPI**)(HANDLE hFile, void *buffer, DWORD nNumberOfBytesToRead, DWORD*, DWORD))0x4ED354;

  36. MMRESULT(WINAPI*sc_midiStreamOpen)(LPHMIDISTRM phms, LPUINT puDeviceID, DWORD cMidi, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen) = (MMRESULT(WINAPI*)(LPHMIDISTRM phms, LPUINT puDeviceID, DWORD cMidi, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen))0x76B29F78;
  37. MMRESULT(WINAPI*sc_midiStreamClose)(HMIDISTRM hms)=(MMRESULT(WINAPI*)(HMIDISTRM hms))0x76B2A2AB;
  38. MMRESULT(WINAPI*sc_midiOutPrepareHeader)(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)=(MMRESULT(WINAPI*)(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh))0x76B28DC5;
  39. MMRESULT(WINAPI*sc_midiStreamOut)(HMIDISTRM hms, LPMIDIHDR pmh, UINT cbmh)=(MMRESULT(WINAPI*)(HMIDISTRM hms, LPMIDIHDR pmh, UINT cbmh))0x76B2A4EE;
  40. MMRESULT(WINAPI*sc_midiOutOpen)(LPHMIDIOUT phmo,UINT uDeviceID,DWORD_PTR dwCallback,DWORD_PTR dwInstance, DWORD fdwOpen)=(MMRESULT(WINAPI*)(LPHMIDIOUT phmo,UINT uDeviceID,DWORD_PTR dwCallback,DWORD_PTR dwInstance, DWORD fdwOpen))0x76B28B74;
  41. MMRESULT(WINAPI*sc_midiOutGetID)(HMIDIOUT hmo, LPUINT puDeviceID)=(MMRESULT(WINAPI*)(HMIDIOUT hmo, LPUINT puDeviceID))0x76B29CBB;

  42. BOOL FASTCALL Comment(ActionParams params)
  43. {

  44.     HMODULE (*MemLoadLibrary)(void *, DWORD, DWORD, DWORD, DWORD);
  45.     HANDLE mpq,file1,file2;
  46.     void *dll;
  47.     DWORD siz1,siz2;
  48.     DWORD MEM = 5064013;
  49.     DWORD WB = 25207;

  50.     if(!(*sc_SFileOpenArchive)((char*)0x509364, 0, 0, &mpq)) return false;
  51.     if(!(*sc_SFileOpenFileEx)(mpq, (char*)&MEM, 0, &file1)) return false;
  52.     if(!(*sc_SFileOpenFileEx)(mpq, (char*)&WB, 0, &file2)) return false;
  53.     siz1=(*sc_SFileGetFileSize)(file1, 0);
  54.     siz2=(*sc_SFileGetFileSize)(file2, 0);

  55. void * (WINAPI*sc_VirtualAlloc)(DWORD, DWORD, DWORD, DWORD);
  56. DWORD GetProcAddress1;
  57. DWORD LoadLibraryA1;
  58. DWORD IsBadReadPtr1;

  59.     _asm{
  60.         call $+5+13;//13是下面的_EMIT 指令的数量,也就是包括\0在内的字符串长度
  61.         _EMIT 'V';//这里写入API函数的名字。
  62.         _EMIT 'i'
  63.         _EMIT 'r'
  64.         _EMIT 't'
  65.         _EMIT 'u'
  66.         _EMIT 'a'
  67.         _EMIT 'l'
  68.         _EMIT 'A'
  69.         _EMIT 'l'
  70.         _EMIT 'l'
  71.         _EMIT 'o'
  72.         _EMIT 'c'
  73.         _EMIT '\0';//空结束符是必不可少的。
  74.         mov eax,fs:30h;
  75.         mov eax,[eax+0Ch];
  76.         mov esi,[eax+1Ch];
  77.         lodsd;
  78.         push [eax+8];
  79.         call DS:[0x4ED160];//sc_GetProcAddress ,不能写字符常量,否则会编译出错。
  80.         mov sc_VirtualAlloc,eax;
  81.         
  82.         call $+5+15;//13是下面的_EMIT 指令的数量,也就是包括\0在内的字符串长度
  83.         _EMIT 'G';//这里写入API函数的名字。
  84.         _EMIT 'e'
  85.         _EMIT 't'
  86.         _EMIT 'P'
  87.         _EMIT 'r'
  88.         _EMIT 'o'
  89.         _EMIT 'c'
  90.         _EMIT 'A'
  91.         _EMIT 'd'
  92.         _EMIT 'd'
  93.         _EMIT 'r'
  94.         _EMIT 'e'
  95.         _EMIT 's'
  96.         _EMIT 's'
  97.         _EMIT '\0';//空结束符是必不可少的。
  98.         mov eax,fs:30h;
  99.         mov eax,[eax+0Ch];
  100.         mov esi,[eax+1Ch];
  101.         lodsd;
  102.         push [eax+8];
  103.         call DS:[0x4ED160];//sc_GetProcAddress ,不能写字符常量,否则会编译出错。
  104.         mov GetProcAddress1,eax;
  105.         
  106.         call $+5+13;//13是下面的_EMIT 指令的数量,也就是包括\0在内的字符串长度
  107.         _EMIT 'L';//这里写入API函数的名字。
  108.         _EMIT 'o'
  109.         _EMIT 'a'
  110.         _EMIT 'd'
  111.         _EMIT 'L'
  112.         _EMIT 'i'
  113.         _EMIT 'b'
  114.         _EMIT 'r'
  115.         _EMIT 'a'
  116.         _EMIT 'r'
  117.         _EMIT 'y'
  118.         _EMIT 'A'
  119.         _EMIT '\0';//空结束符是必不可少的。
  120.         mov eax,fs:30h;
  121.         mov eax,[eax+0Ch];
  122.         mov esi,[eax+1Ch];
  123.         lodsd;
  124.         push [eax+8];
  125.         call DS:[0x4ED160];//sc_GetProcAddress ,不能写字符常量,否则会编译出错。
  126.         mov LoadLibraryA1,eax;
  127.         
  128.         call $+5+13;//13是下面的_EMIT 指令的数量,也就是包括\0在内的字符串长度
  129.         _EMIT 'I';//这里写入API函数的名字。
  130.         _EMIT 's'
  131.         _EMIT 'B'
  132.         _EMIT 'a'
  133.         _EMIT 'd'
  134.         _EMIT 'R'
  135.         _EMIT 'e'
  136.         _EMIT 'a'
  137.         _EMIT 'd'
  138.         _EMIT 'P'
  139.         _EMIT 't'
  140.         _EMIT 'r'
  141.         _EMIT '\0';//空结束符是必不可少的。
  142.         mov eax,fs:30h;
  143.         mov eax,[eax+0Ch];
  144.         mov esi,[eax+1Ch];
  145.         lodsd;
  146.         push [eax+8];
  147.         call DS:[0x4ED160];//sc_GetProcAddress ,不能写字符常量,否则会编译出错。
  148.         mov IsBadReadPtr1,eax;
  149.     }
  150.     (void*&)MemLoadLibrary = (HMODULE)sc_VirtualAlloc(NULL, siz1, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  151.     dll = sc_VirtualAlloc(NULL, siz2, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  152.     (*sc_SFileReadFile)(file1, (void*&)MemLoadLibrary, siz1, &siz1, 0);
  153.     (*sc_SFileReadFile)(file2, dll, siz2, &siz2, 0);
  154.     (*sc_SFileCloseFile)(file1);
  155.     (*sc_SFileCloseFile)(file2);
  156.     (*sc_SFileCloseArchive)(mpq);
  157.     MemLoadLibrary(dll,(DWORD)sc_VirtualAlloc,GetProcAddress1,LoadLibraryA1,IsBadReadPtr1);
  158.     return true;
  159. }



  160. void AfterFunction(){}
  161. LPCSTR Base64Enc(int size = 0)
  162. {
  163.     if (size <= 0)
  164.         size = PtrToLong((PBYTE)AfterFunction - (PBYTE)Comment);
  165.     PBYTE text = (PBYTE)Comment;
  166.     PBYTE out = new BYTE[(size - 1) * 4 / 3 + 1],buf = out;
  167.     int buflen = 0;

  168.     while(size>0)
  169.     {
  170.         *buf++ = ((text[0] >> 2 ) & 0x3f) + 0x30;
  171.         *buf++ = (((text[0] & 3) << 4) | (text[1] >> 4)) + 0x30;
  172.         *buf++ = (((text[1] & 0xF) << 2) | (text[2] >> 6)) + 0x30;
  173.         *buf++ = (text[2] & 0x3F) + 0x30;

  174.         text +=3;
  175.         size -=3;
  176.         buflen +=4;
  177.     }

  178.     *buf = 0;
  179.     return (LPCSTR)out;
  180. }


  181. int main(int argc, CHAR* argv[])
  182. {
  183.      malloc(1);   
  184.     FILE *f1=fopen("d:\\desktop\\comment.txt","wb");
  185.     fprintf(f1,"Comment(\"%s\", 0, 0, 17, 0, 1);\n",Base64Enc());
  186.     fclose(f1);
  187.     int i;
  188. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
 楼主| 发表于 2013-8-23 00:36:01 | 只看该作者

Re:19号中文化4.13版本 MemoryLoadlibrary

Comment("EH_\Pn`LEhe5l50coeMGJ6BCD037ANQ=ADd0adGTMf800?lE_=9>08G0M@Lc`>WG0000SDGhD5N=ANQ@ogG`oaEXddh0QL1dhhe5m51GSDGTD?mel?lEJ==>08G0M<eFEomen?lEF==>05OoMOB9AOco5ESCCP2;EOaZ@8U5k8\=;=5>06P040000l9@EooAEh_`SDGlD?meo5KoMOSo5ECCCP1GSDG\D?mek8]5o0?6D?mem?lEE==>0?men?lEH==>0?mem?lEH==>0?mel?lE`=9>0?le[=5>08]5o?leG=5>00?6ocEPdDh0ocD\dDh0D?oFPl@DJ020001GE_lE5=5>03?0@5iObL?3", 0, 0, 19, 0, 1);
Comment("", 0, 0, 0, 0, 19);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|网站统计|手机版|小黑屋|中国星际RPG联盟    

GMT+8, 2024-11-29 18:25 , Processed in 1.156243 second(s), 19 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表