12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
三国霸业 战车-珍宝-觉醒-攻城掠地SF-全新玩法 免费玩新区 攻城掠地私服 进入游戏
手游私服盒子 各类免费游戏 0.1折送海量资源 各类手游私服 进入游戏
皇家MU2 《奇迹 2:传奇》韩国网禅公司《奇迹》正统续作。 3D锁视角Mmrpg 暗黑3+传奇+流放之路+奇迹 进入游戏
查看: 244|回复: 0

一款传奇SF登录器的反抗与虐待

[复制链接]

312

主题

312

帖子

634

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
634
发表于 2020-7-7 21:39:48 | 显示全部楼层 |阅读模式
       闲着没事,最近在用写易语言的图像操作类,写到PrintWindow函数进行后台截图的时候,正常的win7 32位程序都能完成,无意中冒出个想法,想试试能不能后台截游戏的图像,刚好最近在玩传奇SF准备拿来试手,于是我跟这款号称80复古合击的故事来了!
第一次PrintWindow后台截图成功,然后。。就没有然后了,自从跟成功一次之后,在也没有正常截图出来过,全是白板;
    于是习惯性的拿出终极武器PCHunter扫一扫,首先排除登录器加载了驱动,(别问我为什么这么肯定,PCHunter与360都没拦截到驱动加载),然后骚进程钩子,乖乖这一扫不得了了,请看图:

PCHunter提示模块文件被替换,目测是进程加载后把自身PE信息抹去了,到这里我先试了从磁盘文件中读取PE信息,然后写入登录器进程中,修复PE问题,以为这样就可以万事大吉抱得美人了,没想到竟然还是出现这种报错;
    下一步:
  PEID扫一扫,我艹,竟然加了UPX的壳,怎么办?   干他!ESP定律一路脱到底,这下终于可以报的美人归了吧。重复之前的工作,从文件中读取PE信息进去,PCHunter在扫一扫,还是这种问题,要逆天了这是。 这就到了掏终极武器OD和IDA的时候到了.
    下一步:
    正常的OD附加,一路运行下来OD里的进程退出了,但是登录器已经成功运行。why?   这是哪个娃子写的反调试?  任务管理器打开看看,尼玛,竟然2个登录器进程,搞了半天登录器启动之后,又加载了自身exe文件为新进程,然后自己退出,所以OD看着调试进程已经退出,但是登录器界面成功正常显示,再次掏出PCHunter扫一扫新进程,得了,要翻天,新老进程一模一样的,全部都一样,哎,老老实实的去逆第一个进程吧.
    OD已启动exe方式加载进程,中断到入口点(壳已脱,OEP正确),下个CreateProcessA的断点,进程成功断下,一顿操作猛如虎之后,就有了下面的分析,附上这半天时间分析的代码 .

00401368                        /$  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
0040136E                        |.  68 BC094100   PUSH 80复古合.004109BC                                                ; /pModule = "Kernel32.dll"
00401373                        |.  FF15 18C04000 CALL DWORD PTR DS:[]                   ; \GetModuleHandleA
00401379                        |.  68 CC094100   PUSH 80复古合.004109CC                                                ; /ProcNameOrOrdinal = "VirtualAllocEx"
0040137E                        |.  50            PUSH EAX                                                           ; |hModule
0040137F                        |.  FF15 2CC04000 CALL DWORD PTR DS:[]                     ; \GetProcAddress
00401385                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
0040138B                        |.  8BC8          MOV ECX,EAX                                                        ; EAX= kernel32.VirtualAllocEx
0040138D                        |.  33C0          XOR EAX,EAX
0040138F                        |.  890D 5CBFE400 MOV DWORD PTR DS:[0xE4BF5C],ECX                                     [0xE4BF5C]=VirtualAllocEx
00401395                        |.  85C9          TEST ECX,ECX
00401397                        |.  0F95C0        SETNE AL                                                                     取得ZF值后, 取反, 再放到AL中.
0040139A                        \.  C3            RETN        返回到下面继续执行                                                                 eax=1




0040156F                        |.  85C0          TEST EAX,EAX                               GetProcAddress(VirtualAllocEx)是否=0,不等于0则继续执行,VirtualAllocEx=0则跳转        
00401571                        |.  74 4E         JE SHORT 80复古合.004015C1
00401573                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
00401579                        |.  BB 00010000   MOV EBX,0x100
0040157E                        |.  53            PUSH EBX
0040157F                        |.  E8 D81D0000   CALL 80复古合.0040335C       //没什么用申请堆内存HeapAlloc(),申请的内存可能为是GetModuleFileNameA的参数buffer
00401584                        |.  53            PUSH EBX
00401585                        |.  8BF8          MOV EDI,EAX
00401587                        |.  33DB          XOR EBX,EBX
00401589                        |.  53            PUSH EBX
0040158A                        |.  57            PUSH EDI
0040158B                        |.  89BD 04FDFFFF MOV [LOCAL.191],EDI
00401591                        |.  E8 4A160000   CALL 80复古合.00402BE0     //里面一堆跳转都没实现
00401596                        |.  83C4 10       ADD ESP,0x10
00401599                        |.  68 00010000   PUSH 0x100                                                         ; /BufSize = 100 (256.)
0040159E                        |.  57            PUSH EDI                                                           ; |PathBuffer
0040159F                        |.  53            PUSH EBX                                                           ; |hModule      
004015A0                        |.  FF15 00C04000 CALL DWORD PTR DS:[]                 ; \GetModuleFileNameA     获取当前进程的绝对路径
004015A6                        |.  4F            DEC EDI
004015A7                        |>  8A47 01       /MOV AL,BYTE PTR DS:[EDI+0x1]                                       AL="C"    esi指向"PE"
004015AA                        |.  47            |INC EDI
004015AB                        |.  84C0          |TEST AL,AL                                                         AL="C"  从文件路径取出来的,表示C盘  这里循环读取1字节,直到读完整个路径
004015AD                        |.^ 75 F8         \JNZ SHORT 80复古合.004015A7
004015AF                        |.  A0 B8094100   MOV AL,BYTE PTR DS:[0x4109B8]
004015B4                        |.  8807          MOV BYTE PTR DS:[EDI],AL
004015B6                        |.  83CF FF       OR EDI,0xFFFFFFFF
004015B9                        |.  8B85 04FDFFFF MOV EAX,[LOCAL.191]                                                      eax=进程路径指针
004015BF                        |.  EB 0A         JMP SHORT 80复古合.004015CB                                             


004015C1                        |>  33DB          XOR EBX,EBX                                                            GetProcAddress(VirtualAllocEx)=0则跳转到此                                                      
004015C3                        |.  8BC3          MOV EAX,EBX
004015C5                        |.  8985 04FDFFFF MOV [LOCAL.191],EAX                                                     [LOCAL.191]进程路径=“”




004015CB                        |>  85C0          TEST EAX,EAX                                                           GetProcAddress(VirtualAllocEx)!0则执行到此   
004015CD                        |.  0F84 6C030000 JE 80复古合.0040193F                                                  如果GetProcAddress(VirtualAllocEx)!=0则继续执行,并创建新进程,否则跳转0040193F(好像为退出子程序)  
004015D3                        |.  FF75 F4       PUSH [LOCAL.3]                                                     ; /Arg6
004015D6                        |.  8D4D F4       LEA ECX,[LOCAL.3]                                                  ; |
004015D9                        |.  51            PUSH ECX                                                           ; |Arg5
004015DA                        |.  8D4D DC       LEA ECX,[LOCAL.9]                                                  ; |
004015DD                        |.  51            PUSH ECX                                                           ; |Arg4
004015DE                        |.  FFB5 08FDFFFF PUSH [LOCAL.190]                                                   ; |Arg3
004015E4                        |.  8D8D 08FDFFFF LEA ECX,[LOCAL.190]                                                ; |
004015EA                        |.  51            PUSH ECX                                                           ; |Arg2
004015EB                        |.  8D4D E8       LEA ECX,[LOCAL.6]                                                  ; |
004015EE                        |.  51            PUSH ECX                                                           ; |Arg1
004015EF                        |.  8D95 10FDFFFF LEA EDX,[LOCAL.188]                                                ; |
004015F5                        |.  8BC8          MOV ECX,EAX                                                        ; |
004015F7                        |.  E8 EFFDFFFF   CALL 80复古合.004013EB                                                ; \里面创建进程!!!并读内存,然后查询了进程的内存属性
004015FC                        |.  8B7D E8       MOV EDI,[LOCAL.6]
004015FF                        |.  85C0          TEST EAX,EAX
00401601                        |.  0F84 21030000 JE 80复古合.00401928                             进程创建失败,则跳转到00401928 函数尾部                                 
00401607                        |.  8B4D E0       MOV ECX,[LOCAL.8]
0040160A                        |.  8B85 08FDFFFF MOV EAX,[LOCAL.190]
00401610                        |.  895D E0       MOV [LOCAL.8],EBX
00401613                        |.  8901          MOV DWORD PTR DS:[ECX],EAX
00401615                        |.  8B45 DC       MOV EAX,[LOCAL.9]
00401618                        |.  3946 34       CMP DWORD PTR DS:[ESI+0x34],EAX                    
0040161B                        |.  75 2A         JNZ SHORT 80复古合.00401647                           '这里比较基地址是否相同 0x400000,不相同则跳转到 00401647                    
0040161D                        |.  8B8D 0CFDFFFF MOV ECX,[LOCAL.189]
00401623                        |.  394D F4       CMP [LOCAL.3],ECX                                    
00401626                        |.  72 1F         JB SHORT 80复古合.00401647                              '这里比较模块大小是否相同?如果相同则跳转
00401628                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
0040162E                        |.  8D4D E8       LEA ECX,[LOCAL.6]
00401631                        |.  51            PUSH ECX                                                           ; /pOldProtect
00401632                        |.  6A 40         PUSH 0x40                                                          ; |NewProtect = PAGE_EXECUTE_READWRITE
00401634                        |.  FF75 F4       PUSH [LOCAL.3]                                                     ; |Size
00401637                        |.  8945 E0       MOV [LOCAL.8],EAX                                                  ; |
0040163A                        |.  50            PUSH EAX                                                           ; |Address
0040163B                        |.  57            PUSH EDI                                                           ; |hProcess
0040163C                        |.  FF15 24C04000 CALL DWORD PTR DS:[]                   ; \VirtualProtectEx
00401642                        |.  E9 B7000000   JMP 80复古合.004016FE


00401647                        |>  E8 1CFDFFFF   CALL 80复古合.00401368      基地址不相同 0x400000   则跳转此处
0040164C                        |.  85C0          TEST EAX,EAX
0040164E                        |.  0F84 AA000000 JE 80复古合.004016FE
00401654                        |.  8B55 DC       MOV EDX,[LOCAL.9]
00401657                        |.  8BCF          MOV ECX,EDI
00401659                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
0040165F                        |.  E8 37FDFFFF   CALL 80复古合.0040139B
00401664                        |.  85C0          TEST EAX,EAX
00401666                        |.  74 1C         JE SHORT 80复古合.00401684
00401668                        |.  6A 40         PUSH 0x40
0040166A                        |.  68 00300000   PUSH 0x3000
0040166F                        |.  FFB5 0CFDFFFF PUSH [LOCAL.189]
00401675                        |.  FF76 34       PUSH DWORD PTR DS:[ESI+0x34]
00401678                        |.  57            PUSH EDI
00401679                        |.  FF15 5CBFE400 CALL DWORD PTR DS:[0xE4BF5C]                                       ;  kernel32.VirtualAllocEx
0040167F                        |.  8945 E0       MOV [LOCAL.8],EAX
00401682                        |.  EB 03         JMP SHORT 80复古合.00401687
00401684                        |>  8B45 E0       MOV EAX,[LOCAL.8]
00401687                        |>  85C0          TEST EAX,EAX
00401689                        |.  75 7D         JNZ SHORT 80复古合.00401708
0040168B                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
00401691                        |.  399E A0000000 CMP DWORD PTR DS:[ESI+0xA0],EBX
00401697                        |.  0F84 59020000 JE 80复古合.004018F6
0040169D                        |.  399E A4000000 CMP DWORD PTR DS:[ESI+0xA4],EBX
004016A3                        |.  0F84 4D020000 JE 80复古合.004018F6
004016A9                        |.  6A 40         PUSH 0x40
004016AB                        |.  68 00300000   PUSH 0x3000
004016B0                        |.  FFB5 0CFDFFFF PUSH [LOCAL.189]
004016B6                        |.  53            PUSH EBX
004016B7                        |.  57            PUSH EDI
004016B8                        |.  FF15 5CBFE400 CALL DWORD PTR DS:[0xE4BF5C]                                       ;  kernel32.VirtualAllocEx
004016BE                        |.  8BC8          MOV ECX,EAX
004016C0                        |.  894D E0       MOV [LOCAL.8],ECX
004016C3                        |.  85C9          TEST ECX,ECX
004016C5                        |.  0F84 2B020000 JE 80复古合.004018F6
004016CB                        |.  8B96 A0000000 MOV EDX,DWORD PTR DS:[ESI+0xA0]
004016D1                        |.  0355 E4       ADD EDX,[LOCAL.7]
004016D4                        |.  8305 58BFE400>ADD DWORD PTR DS:[0xE4BF58],0x2
004016DB                        |.  8B4A 04       MOV ECX,DWORD PTR DS:[EDX+0x4]
004016DE                        |.  030A          ADD ECX,DWORD PTR DS:[EDX]
004016E0                        |.  74 1C         JE SHORT 80复古合.004016FE
004016E2                        |>  8B42 04       /MOV EAX,DWORD PTR DS:[EDX+0x4]
004016E5                        |.  8D4A 08       |LEA ECX,DWORD PTR DS:[EDX+0x8]
004016E8                        |.  83E8 08       |SUB EAX,0x8
004016EB                        |.  D1E8          |SHR EAX,1
004016ED                        |.  83F8 01       |CMP EAX,0x1
004016F0                        |.  72 03         |JB SHORT 80复古合.004016F5
004016F2                        |.  8D0C41        |LEA ECX,DWORD PTR DS:[ECX+EAX*2]
004016F5                        |>  8B41 04       |MOV EAX,DWORD PTR DS:[ECX+0x4]
004016F8                        |.  8BD1          |MOV EDX,ECX
004016FA                        |.  0301          |ADD EAX,DWORD PTR DS:[ECX]
004016FC                        |.^ 75 E4         \JNZ SHORT 80复古合.004016E2


004016FE                        |>  837D E0 00    CMP [LOCAL.8],0x0   正常流程jmp到此
00401702                        |.  0F84 EE010000 JE 80复古合.004018F6
00401708                        |>  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
0040170E                        |.  8D45 E8       LEA EAX,[LOCAL.6]
00401711                        |.  50            PUSH EAX                                                           ; /pBytesWritten
00401712                        |.  6A 04         PUSH 0x4                                                           ; |BytesToWrite = 0x4          第一次写大小 4
00401714                        |.  8D45 E0       LEA EAX,[LOCAL.8]                                                  ; |
00401717                        |.  50            PUSH EAX                                                           ; |Buffer                   buffer地址里的值=0x400000
00401718                        |.  8B85 B4FDFFFF MOV EAX,[LOCAL.147]                                                ; |
0040171E                        |.  83C0 08       ADD EAX,0x8                                                        ; |
00401721                        |.  50            PUSH EAX                                                           ; |Address                     写入地址=7efde008  里面的值=0x400000
00401722                        |.  57            PUSH EDI                                                           ; |hProcess                        进程句柄=0x30  判断下本地进程还是目标进程
00401723                        |.  FF15 04C04000 CALL DWORD PTR DS:[]                 ; \WriteProcessMemory               此次似乎没有用?  都=0x40000
00401729                        |.  8B45 E0       MOV EAX,[LOCAL.8]
0040172C                        |.  8D4D E8       LEA ECX,[LOCAL.6]
0040172F                        |.  51            PUSH ECX                                                           ; /pBytesWritten
00401730                        |.  FFB5 0CFDFFFF PUSH [LOCAL.189]                                                   ; |BytesToWrite               0x5823000
00401736                        |.  8946 34       MOV DWORD PTR DS:[ESI+0x34],EAX                                    ; |
00401739                        |.  FF75 E4       PUSH [LOCAL.7]                                                     ; |Buffer                    buffer地址10b0000里的值="MZP"              
0040173C                        |.  50            PUSH EAX                                                           ; |Address                      0x400000
0040173D                        |.  57            PUSH EDI                                                           ; |hProcess                          进程句柄=0x30
0040173E                        |.  FF15 04C04000 CALL DWORD PTR DS:[]                 ; \WriteProcessMemory
00401744                        |.  85C0          TEST EAX,EAX
00401746                        |.  0F84 7A010000 JE 80复古合.004018C6                                            写入失败则跳转004018C6
0040174C                        |.  8B4D E0       MOV ECX,[LOCAL.8]
0040174F                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
00401755                        |.  8B46 28       MOV EAX,DWORD PTR DS:[ESI+0x28]
00401758                        |.  C785 10FDFFFF>MOV [LOCAL.188],0x10007
00401762                        |.  3B4D DC       CMP ECX,[LOCAL.9]
00401765                        |.  75 05         JNZ SHORT 80复古合.0040176C
00401767                        |.  0346 34       ADD EAX,DWORD PTR DS:[ESI+0x34]
0040176A                        |.  EB 02         JMP SHORT 80复古合.0040176E
0040176C                        |>  03C1          ADD EAX,ECX
0040176E                        |>  8985 C0FDFFFF MOV [LOCAL.144],EAX
00401774                        |.  B8 3C004000   MOV EAX,80复古合.0040003C
00401779                        |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
0040177B                        |.  05 00004000   ADD EAX,80复古合.00400000
00401780                        |.  83C0 28       ADD EAX,0x28
00401783                        |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
00401785                        |.  05 00004000   ADD EAX,80复古合.00400000
0040178A                        |.  8985 0CFDFFFF MOV [LOCAL.189],EAX
00401790                        |.  8305 58BFE400>ADD DWORD PTR DS:[0xE4BF58],0x5
00401797                        |.  8D45 E4       LEA EAX,[LOCAL.7]
0040179A                        |.  50            PUSH EAX                                                           ; /pBytesRead
0040179B                        |.  6A 05         PUSH 0x5                                                           ; |BytesToRead = 0x5     要读取的大小 0x5
0040179D                        |.  8D45 EC       LEA EAX,[LOCAL.5]                                                  ; |
004017A0                        |.  885D EC       MOV BYTE PTR SS:[EBP-0x14],BL                                      ; |
004017A3                        |.  50            PUSH EAX                                                           ; |Buffer         保持地址
004017A4                        |.  FFB5 0CFDFFFF PUSH [LOCAL.189]                                                   ; |pBaseAddress     目标地址 0x401b91
004017AA                        |.  895D ED       MOV DWORD PTR SS:[EBP-0x13],EBX                                    ; |
004017AD                        |.  57            PUSH EDI                                                           ; |hProcess         0x30
004017AE                        |.  C745 F4 E9000>MOV [LOCAL.3],0xE9                                                 ; |
004017B5                        |.  885D F8       MOV BYTE PTR SS:[EBP-0x8],BL                                       ; |
004017B8                        |.  FF15 30C04000 CALL DWORD PTR DS:[]                  ; \ReadProcessMemory
004017BE                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
004017C4                        |.  6A 40         PUSH 0x40
004017C6                        |.  68 00100000   PUSH 0x1000
004017CB                        |.  6A 05         PUSH 0x5
004017CD                        |.  53            PUSH EBX
004017CE                        |.  57            PUSH EDI
004017CF                        |.  FF15 5CBFE400 CALL DWORD PTR DS:[0xE4BF5C]                                       ;  kernel32.VirtualAllocEx
004017D5                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
004017DB                        |.  8BF0          MOV ESI,EAX
004017DD                        |.  8D45 E8       LEA EAX,[LOCAL.6]
004017E0                        |.  50            PUSH EAX                                                           ; /pBytesWritten
004017E1                        |.  6A 05         PUSH 0x5                                                           ; |BytesToWrite =  写入大小= 0x5
004017E3                        |.  8D45 EC       LEA EAX,[LOCAL.5]                                                  ; |
004017E6                        |.  50            PUSH EAX                                                           ; |Buffer      buffer地址18feec里的值=0x8dc9bc0f   
004017E7                        |.  56            PUSH ESI                                                           ; |Address        0x1c0000
004017E8                        |.  57            PUSH EDI                                                           ; |hProcess       0x30
004017E9                        |.  FF15 04C04000 CALL DWORD PTR DS:[]                 ; \WriteProcessMemory
004017EF                        |.  8B85 0CFDFFFF MOV EAX,[LOCAL.189]
004017F5                        |.  8305 58BFE400>ADD DWORD PTR DS:[0xE4BF58],0x4
004017FC                        |.  6A 40         PUSH 0x40
004017FE                        |.  68 00100000   PUSH 0x1000
00401803                        |.  68 CE8D0300   PUSH 0x38DCE
00401808                        |.  53            PUSH EBX
00401809                        |.  A3 92274100   MOV DWORD PTR DS:[0x412792],EAX
0040180E                        |.  8B85 C0FDFFFF MOV EAX,[LOCAL.144]
00401814                        |.  57            PUSH EDI
00401815                        |.  8935 8D274100 MOV DWORD PTR DS:[0x41278D],ESI
0040181B                        |.  A3 A0274100   MOV DWORD PTR DS:[0x4127A0],EAX
00401820                        |.  FF15 5CBFE400 CALL DWORD PTR DS:[0xE4BF5C]                                       ;  kernel32.VirtualAllocEx
00401826                        |.  8305 58BFE400>ADD DWORD PTR DS:[0xE4BF58],0x3
0040182D                        |.  8BF0          MOV ESI,EAX
0040182F                        |.  8B1D 04C04000 MOV EBX,DWORD PTR DS:[]              ;  kernel32.WriteProcessMemory
00401835                        |.  8D45 E8       LEA EAX,[LOCAL.6]
00401838                        |.  50            PUSH EAX                                                           ; pBytesWritten
00401839                        |.  68 CE8D0300   PUSH 0x38DCE                                                       ; |BytesToWrite        写入大小= 38DCE
0040183E                        |.  68 80274100   PUSH 80复古合.00412780                                             ; |Buffer =            buffer=00412780
00401843                        |.  56            PUSH ESI                                                           ; |Address          写入的地址= 1d0000里的值"LMOV DWORD PTR DS:[0x412788],0x19                                   ; |
00401854                        |.  57            PUSH EDI                                                           ; |hProcess                30
00401855                        |.  890D 83274100 MOV DWORD PTR DS:[0x412783],ECX                                    ; |
0040185B                        |.  FFD3          CALL EBX                                                           ; \WriteProcessMemory
0040185D                        |.  2BB5 0CFDFFFF SUB ESI,[LOCAL.189]
00401863                        |.  8D45 E8       LEA EAX,[LOCAL.6]
00401866                        |.  8305 58BFE400>ADD DWORD PTR DS:[0xE4BF58],0x3
0040186D                        |.  83EE 05       SUB ESI,0x5
00401870                        |.  50            PUSH EAX                                                           ; /pOldProtect
00401871                        |.  6A 40         PUSH 0x40                                                          ; |NewProtect = PAGE_EXECUTE_READWRITE
00401873                        |.  6A 05         PUSH 0x5                                                           ; |Size = 0x5
00401875                        |.  FFB5 0CFDFFFF PUSH [LOCAL.189]                                                   ; |Address
0040187B                        |.  8975 F5       MOV DWORD PTR SS:[EBP-0xB],ESI                                     ; |
0040187E                        |.  57            PUSH EDI                                                           ; |hProcess
0040187F                        |.  FF15 24C04000 CALL DWORD PTR DS:[]                   ; \VirtualProtectEx
00401885                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
0040188B                        |.  8D45 E8       LEA EAX,[LOCAL.6]
0040188E                        |.  50            PUSH EAX                                                           ; /pBytesWritten
0040188F                        |.  6A 05         PUSH 0x5                                                           ; |BytesToWrite =  写入大小= 0x5
00401891                        |.  8D45 F4       LEA EAX,[LOCAL.3]                                                  ; |
00401894                        |.  50            PUSH EAX                                                           ; |Buffer         buffer里的值有e9,这里是hook入口点
00401895                        |.  FFB5 0CFDFFFF PUSH [LOCAL.189]                                                   ; |Address         写入的地址=0x401b91   '模块入口点!!!!!!!!!!
0040189B                        |.  57            PUSH EDI                                                           ; |hProcess
0040189C                        |.  FFD3          CALL EBX                                                           ; \WriteProcessMemory
0040189E                        |.  8B9D 08FDFFFF MOV EBX,[LOCAL.190]
004018A4                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
004018AA                        |.  53            PUSH EBX                                                           ; /hThread
004018AB                        |.  FF15 14C04000 CALL DWORD PTR DS:[]                       ; \ResumeThread
004018B1                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
004018B7                        |.  53            PUSH EBX                                                           ; /hObject
004018B8                        |.  FF15 20C04000 CALL DWORD PTR DS:[]                        ; \CloseHandle
004018BE                        |.  A1 58BFE400   MOV EAX,DWORD PTR DS:[0xE4BF58]
004018C3                        |.  40            INC EAX
004018C4                        |.  EB 67         JMP SHORT 80复古合.0040192D                                              这里恢复进程运行之后,跳转到0040192D  




004018C6                        |>  53            PUSH EBX                                                           ; /ExitCode            写入失败则跳转到此,这里进行一些退出的清理工作
004018C7                        |.  57            PUSH EDI                                                           ; |hProcess
004018C8                        |.  FF15 10C04000 CALL DWORD PTR DS:[]                   ; \TerminateProcess
004018CE                        |.  FFB5 08FDFFFF PUSH [LOCAL.190]                                                   ; /hObject
004018D4                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]                                        ; |
004018DA                        |.  8B35 20C04000 MOV ESI,DWORD PTR DS:[]                     ; |kernel32.CloseHandle
004018E0                        |.  FFD6          CALL ESI                                                           ; \CloseHandle
004018E2                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
004018E8                        |.  57            PUSH EDI                                                           ; /hObject
004018E9                        |.  FFD6          CALL ESI                                                           ; \CloseHandle
004018EB                        |.  A1 58BFE400   MOV EAX,DWORD PTR DS:[0xE4BF58]
004018F0                        |.  40            INC EAX
004018F1                        |.  83CF FF       OR EDI,0xFFFFFFFF
004018F4                        |.  EB 37         JMP SHORT 80复古合.0040192D
004018F6                        |>  53            PUSH EBX                                                           ; /ExitCode
004018F7                        |.  57            PUSH EDI                                                           ; |hProcess
004018F8                        |.  FF15 10C04000 CALL DWORD PTR DS:[]                   ; \TerminateProcess
004018FE                        |.  FFB5 08FDFFFF PUSH [LOCAL.190]                                                   ; /hObject
00401904                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]                                        ; |
0040190A                        |.  8B35 20C04000 MOV ESI,DWORD PTR DS:[]                     ; |kernel32.CloseHandle
00401910                        |.  FFD6          CALL ESI                                                           ; \CloseHandle
00401912                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]
00401918                        |.  57            PUSH EDI                                                           ; /hObject
00401919                        |.  FFD6          CALL ESI                                                           ; \CloseHandle
0040191B                        |.  A1 58BFE400   MOV EAX,DWORD PTR DS:[0xE4BF58]
00401920                        |.  83CF FF       OR EDI,0xFFFFFFFF
00401923                        |.  83C0 02       ADD EAX,0x2
00401926                        |.  EB 05         JMP SHORT 80复古合.0040192D


00401928                        |>  A1 58BFE400   MOV EAX,DWORD PTR DS:[0xE4BF58]    进程创建失败跳转到此




0040192D                        |>  FFB5 04FDFFFF PUSH [LOCAL.191]
00401933                        |.  40            INC EAX
00401934                        |.  A3 58BFE400   MOV DWORD PTR DS:[0xE4BF58],EAX
00401939                        |.  E8 191A0000   CALL 80复古合.00403357                     这个call里面进行一些堆内存清理工作
0040193E                        |.  59            POP ECX




0040193F                        |>  8B4D FC       MOV ECX,[LOCAL.1]      GetProcAddress(VirtualAllocEx)失败,则跳到此处   
00401942                        |.  8BC7          MOV EAX,EDI
00401944                        |.  FF05 58BFE400 INC DWORD PTR DS:[0xE4BF58]         正常这里自加后=38e35,跳过创建进程等操作后=38e18
0040194A                        |.  33CD          XOR ECX,EBP
0040194C                        |.  5F            POP EDI
0040194D                        |.  5E            POP ESI
0040194E                        |.  5B            POP EBX
0040194F                        |.  E8 06000000   CALL 80复古合.0040195A   无用,不用管
00401954                        |.  8BE5          MOV ESP,EBP
00401956                        |.  5D            POP EBP
00401957                        \.  C2 1C00       RETN 0x1C                       这里结束后,进程已经创建成功,并且新进程已经能正常显示




目前知问题:
1,登录器通过判断 GetProcAddress(VirtualAllocEx)的返回值来决定是否创建傀儡进程(新进程)
2,中间有个不停出现的计数器++,目测是防止更改程序逻辑之后,检测计数器的值来判定是否被path
3,试了通过修改 GetProcAddress(VirtualAllocEx)的返回值,来让登录器跳过创建傀儡进程,而自身正常运行(傀儡进程和自身进程以及游戏进程都是同一个文件,同一个逻辑)
4,代码中有一堆写远程内存操作,都是修改傀儡进程PE信息的,直接path,还是出错,目测有校验


画了我一天时间,实在是没有精力搞下去了,奉上dump,以及分析的文档,有兴趣的可以试试。dump为传奇SF登录器,目前在运营状态。 dump为脱壳之后的exe,需要原装的可以打开登录器去网站上下载。











第一次发帖,才发现不能附件不能超过1M,这里是登录器的网站http://www.9292d.com/,就几M大小,单双dump没有了,upx的壳,就自己脱了吧
















  


来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-11-25 09:53 , Processed in 0.093750 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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