首页
社区
课程
招聘
[原创]0基础破解一款经典游戏反作弊器的过程
发表于: 2021-1-22 21:29 10436

[原创]0基础破解一款经典游戏反作弊器的过程

2021-1-22 21:29
10436

前言:


当然这是一款比较老的游戏,如今也只有少数痴迷、热爱的朋友在玩。(是不是暴露年龄了?)

工具:

使用的几款工具:
PEiD;
IDA pro 7;逆向神器,静态分析读代码,特别是交叉引用分析,对代码分析作用很大;
WinDbg Preview;动态分析,异常捕获分析,动态和静态联合分析对我这次逆向启发很大;
DeDeDark(本次没用上,具体是破解程序使用了针对这款逆向工具的反跟踪,还是DD软件的原因目前还不太清楚;我个人觉得前者的可能性高,因为在跟踪过程中发现很多“int 3”的调试陷阱代码,具体是不是限于个人水平没有弄清楚,这里请大佬指正。)

思路和步骤:

1.判断软件是基于什么编译系统开发的,并且有无壳的保护

2.熟悉反作弊登陆器的功能,判断反作弊的机制是什么


3.登陆器是如何启动游戏进程的

首先,登陆器启动游戏进程,需要一次进程调用,Window平台启动进程函数WinExec、ShellExecute、CreateProcess,因此依次定位这几处代码的调用,判断登陆器是如何启动游戏进程的。

sub_5FAADC:
push ebp
push offset loc_5FAB2A
push dword ptr fs:[eax]
mov fs:[eax], esp
push 5 ; nShowCmd
push 0 ; lpDirectory
push 0 ; lpParameters
mov eax, [ebp+var_4]
call sub_407954
push eax ; lpFile
push offset Operation ; "open"
push 0 ; hwnd
call ShellExecuteW (此处并非游戏启动)
xor eax, eax
pop edx
pop ecx
pop ecx

sub_609B30:
mov ecx, [ebp+var_4]
mov edx, offset aOld ; "old"
call sub_407BC0
mov eax, [ebp+var_5C]
call sub_407954
push eax ; lpParameters
lea edx, [ebp+var_64]
mov eax, [ebx]
call unknown_libname_1018 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
mov eax, [ebp+var_64] ; System::AnsiString
lea edx, [ebp+var_60]
call @Sysutils@ExtractFilePath$qqrx17System@AnsiString ; Sysutils::ExtractFilePath(System::AnsiString)
lea eax, [ebp+var_60]
mov edx, [ebp+var_4]
call sub_407B68
mov eax, [ebp+var_60]
call sub_407954
push eax ; lpFile
push offset aOpen_0 ; "Open"
push 0 ; hwnd
call ShellExecuteW (此处也不是)
mov eax, [ebx] ; this
call @Forms@TApplication@Terminate$qqrv ; Forms::TApplication::Terminate(void)
xor eax, eax
pop edx
pop ecx

; int __fastcall TForm1_btn5Click(Ibcustomdataset::TIBDataSet *this)
_TForm1_btn5Click proc near
push ebx
mov ebx, eax
push 1 ; nShowCmd
push 0 ; lpDirectory
push 0 ; lpParameters
push offset File ; "http://www.ip138.com/"
push 0 ; lpOperation
mov eax, ebx ; this
call @Ibcustomdataset@TIBDataSet@PSGetParams$qqrv ; Ibcustomdataset::TIBDataSet::PSGetParams(void)
push eax ; hwnd
call ShellExecuteW (此处是检查IP代码处,会打开浏览器自行检查机器IP,登陆器查看本机IP功能的实现)
pop ebx
retn

TForm1_btn6Click
push offset aIndexHtml ; "_index.html"
lea eax, [ebp+var_4]
mov edx, 6
call sub_407C48
push 1 ; nShowCmd
push 0 ; lpDirectory
push 0 ; lpParameters
mov eax, [ebp+var_4]
call sub_407954
push eax ; lpFile
push 0 ; lpOperation
mov eax, ebx ; this
call @Ibcustomdataset@TIBDataSet@PSGetParams$qqrv ; Ibcustomdataset::TIBDataSet::PSGetParams(void)
push eax ; hwnd
call ShellExecuteW(查看服务器截图,会打开浏览器)
xor eax, eax
pop edx

由此可见,登陆器至少还与系统进程、浏览器进程有协作,并非游戏进程一个,这从登陆器界面中也可以判断出来,如打开系统文件目录设置游戏启动路径,查看IP和截图。

ShellExecuteW 定位并未找到启动游戏进程代码入口,因此换CreateProcess,果然发现,一处父类的点击调用(通过IDA文字提示能找到很多程序本身的信息线索),应该判断是游戏的启动入口。

text:0060C82E loc_60C82E: ; CODE XREF: _TForm1_btn_StrarClick+549↑j
.text:0060C82E call unknown_libname_413 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
.text:0060C833 call sub_456914
.text:0060C838 push offset off_60CD5C ; lpName
.text:0060C83D push 0 ; int
.text:0060C83F push 0 ; lpMutexAttributes
.text:0060C841 call @Windows@CreateMutexW$qqsp20_SECURITY_ATTRIBUTESipb ; Windows::CreateMutexW(_SECURITY_ATTRIBUTES ,int,wchar_t )(判断游戏进程是否已经启动,如果启动会终止,保证一个游戏进程的运行)
.text:0060C846 lea eax, [ebp+ProcessInformation]
.text:0060C84C push eax ; lpProcessInformation
.text:0060C84D lea eax, [ebp+StartupInfo]
.text:0060C853 push eax ; lpStartupInfo
.text:0060C854 push 0 ; lpCurrentDirectory
.text:0060C856 push 0 ; lpEnvironment
.text:0060C858 push 20h ; dwCreationFlags
.text:0060C85A push 0 ; bInheritHandles
.text:0060C85C push 0 ; lpThreadAttributes
.text:0060C85E push 0 ; lpProcessAttributes
.text:0060C860 lea eax, [ebp+var_478]
.text:0060C866 lea edx, [ebp+var_2C1]
.text:0060C86C mov ecx, 0FFh
.text:0060C871 push 0
.text:0060C873 call sub_407450
.text:0060C878 mov edx, [ebp+var_478]
.text:0060C87E lea eax, [ebp+var_474]
.text:0060C884 call sub_407A2C
.text:0060C889 mov eax, [ebp+var_474]
.text:0060C88F call sub_407954
.text:0060C894 push eax ; lpCommandLine
.text:0060C895 lea eax, [ebp+var_480]
.text:0060C89B lea edx, [ebp+var_3C0]
.text:0060C8A1 mov ecx, 0FFh
.text:0060C8A6 push 0
.text:0060C8A8 call sub_407450
.text:0060C8AD mov edx, [ebp+var_480]
.text:0060C8B3 lea eax, [ebp+var_47C]
.text:0060C8B9 call sub_407A2C
.text:0060C8BE mov eax, [ebp+var_47C]
.text:0060C8C4 call sub_407954
.text:0060C8C9 push eax ; lpApplicationName
.text:0060C8CA call CreateProcessW (游戏进程启动)
.text:0060C8CF mov eax, [ebp+ProcessInformation.dwProcessId]
.text:0060C8D5 xor edx, edx ; System::AnsiString
.text:0060C8D7 cmp edx, 0FFFFFFFFh
.text:0060C8DA jnz short loc_60C903
.text:0060C8DC cmp eax, 0FFFFFFFFh
.text:0060C8DF jnz short loc_60C903
.text:0060C8E1 mov eax, offset aCstrike64 ; "cstrike游戏启动失败,64位系统试下登录器右键用管理员运行" (读不懂代码,这里有提示啊)
.text:0060C8E6 call @Dialogs@ShowMessage$qqrx17System@AnsiString ; Dialogs::ShowMessage(System::AnsiString)
.text:0060C8EB push 0 ; lParam
.text:0060C8ED push 0 ; wParam
.text:0060C8EF push 10h ; Msg
.text:0060C8F1 mov eax, ebx ; this
.text:0060C8F3 call @Ibcustomdataset@TIBDataSet@PSGetParams$qqrv ; Ibcustomdataset::TIBDataSet::PSGetParams(void)
.text:0060C8F8 push eax ; hWnd
.text:0060C8F9 call PostMessageW
.text:0060C8FE call sub_426460
.text:0060C903
.text:0060C903 loc_60C903: ; CODE XREF: _TForm1_btn_StrarClick+5FA↑j
.text:0060C903 ; _TForm1_btn_StrarClick+5FF↑j
.text:0060C903 mov eax, [ebp+ProcessInformation.dwProcessId]
.text:0060C909 mov ds:dword_675690, eax
.text:0060C90E mov eax, 3E8h
.text:0060C913 call sub_606F30
.text:0060C918 mov eax, offset aCstrikeExe_2 ; "cstrike.exe" (这里也是提示)
.text:0060C91D call sub_607430
.text:0060C922 cmp al, 1
.text:0060C924 jnz loc_60CA1A
.text:0060C92A cmp ds:dword_675690, 0FFFFFFFFh
.text:0060C931 jz short loc_60C96E
.text:0060C933 mov dl, 1
.text:0060C935 mov eax, [ebx+418h]
.text:0060C93B call unknown_libname_848 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
.text:0060C940 mov eax, off_66EC78
.text:0060C945 mov eax, [eax]
.text:0060C947 lea edx, [ebp+var_3C0]
.text:0060C94D call sub_6013DC
.text:0060C952 mov eax, off_66EC78
.text:0060C957 mov eax, [eax]
.text:0060C959 call sub_60283C
.text:0060C95E mov eax, off_66EC78
.text:0060C963 mov eax, [eax]
.text:0060C965 mov dl, 1
.text:0060C967 call sub_6017F0
.text:0060C96C jmp short loc_60C9A8

游戏启动入口找到了,发现了一个替换原程序dll文件的代码,就在游戏进程启动之前:
push 80h ; dwFileAttributes
lea edx, [ebp+var_428]
mov eax, ds:dword_6755F4
mov eax, [eax+3E0h] ; this
call sub_495714
lea eax, [ebp+var_428]
mov edx, offset aOpengl32Dll ; "opengl32.dll"
call sub_407B68
mov eax, [ebp+var_428]
call sub_407954
push eax ; lpFileName
call SetFileAttributesW
lea edx, [ebp+var_42C]
mov eax, ds:dword_6755F4
mov eax, [eax+3E0h] ; this
call sub_495714
lea eax, [ebp+var_42C]
mov edx, offset aOpengl32Dll ; "opengl32.dll"
call sub_407B68
mov eax, [ebp+var_42C]
call sub_4213C4
lea edx, [ebp+var_430]
mov eax, ds:dword_6755F4
mov eax, [eax+3E0h] ; this
call sub_495714
lea eax, [ebp+var_430]
mov edx, offset aOpengl322Dll ; "opengl322.dll"
call sub_407B68
mov ecx, [ebp+var_430]
mov edx, offset aOpengl32 ; "opengl32"
mov eax, offset off_60CCB4
call sub_6076D0
lea edx, [ebp+var_434]
mov eax, ds:dword_6755F4
mov eax, [eax+3E0h] ; this
call sub_495714
mov edx, [ebp+var_434]
lea eax, [ebp+var_10]
mov ecx, offset aOpengl322Dll ; "opengl322.dll"
call sub_407BC0
lea edx, [ebp+var_438]
mov eax, ds:dword_6755F4
mov eax, [eax+3E0h] ; this
call sub_495714
mov edx, [ebp+var_438]
lea eax, [ebp+var_14]
mov ecx, offset aOpengl32Dll ; "opengl32.dll"
call sub_407BC0
mov eax, [ebp+var_14]
call sub_407954
push eax ; lpNewFileName
mov eax, [ebp+var_10]
call sub_407954
push eax ; lpExistingFileName
call MoveFileW (用登陆器opengl322.dll替换掉原来的,即使读不懂代码,单步跟踪也是可以发现的。我曾经尝试过IDA分析替换后的opengl32文件,水平有限没看懂具体功能,估计是用作玩家个性化功能的实现,这个文件主要是玩家服装、枪和道具的功能,游戏中VIP玩家样式是不同的,实现功能可能是在这里)
cmp eax, 1
sbb eax, eax
inc eax
jmp short loc_60C5C1

4.关键的问题:登陆器是如何监护游戏进程,进行截图反作弊的

0059AA15 call dword ptr [ecx+38h]
.text:0059AA18 push 40CC0020h ; DWORD
.text:0059AA1D push 0 ; int
.text:0059AA1F push 0 ; int
.text:0059AA21 mov eax, [ebp+hDC]
.text:0059AA24 push eax ; HDC
.text:0059AA25 mov eax, off_66F110
.text:0059AA2A mov eax, [eax]
.text:0059AA2C call sub_543ABC
.text:0059AA31 push eax ; int
.text:0059AA32 mov eax, off_66F110
.text:0059AA37 mov eax, [eax]
.text:0059AA39 call sub_543AC4
.text:0059AA3E push eax ; int
.text:0059AA3F push 0 ; int
.text:0059AA41 push 0 ; int
.text:0059AA43 mov eax, [ebp+var_28] ; this
.text:0059AA46 call @Graphics@TBitmap@GetCanvas$qqrv ; Graphics::TBitmap::GetCanvas(void)
.text:0059AA4B call sub_46ECE4
.text:0059AA50 push eax ; HDC
.text:0059AA51 call BitBlt (读取截图)
.text:0059AA56 test eax, eax
.text:0059AA58 jnz short loc_59AA69
.text:0059AA5A call @System@@TryFinallyExit$qqrv ; System::linkproc TryFinallyExit(void)
.text:0059AA5F call @System@@TryFinallyExit$qqrv ; System::linkproc TryFinallyExit(void)
.text:0059AA64 jmp loc_59ACFF
……
0059ABBC mov eax, esi
.text:0059ABBE mov ebx, [eax]
.text:0059ABC0 call dword ptr [ebx+90h]
.text:0059ABC6 lea eax, [ebp+var_10]
.text:0059ABC9 mov edx, offset aYyyyMmDdHhMmSs_0 ; "yyyy-MM-dd hh:mm:ss"
.text:0059ABCE call sub_4070CC
.text:0059ABD3 call @Sysutils@Now$qqrv ; Sysutils::Now(void)
.text:0059ABD8 fstp [ebp+var_38]
.text:0059ABDB wait
.text:0059ABDC push dword ptr [ebp+var_38+4]
.text:0059ABDF push dword ptr [ebp+var_38]
.text:0059ABE2 lea ecx, [ebp+var_14]
.text:0059ABE5 mov edx, off_66ED4C
.text:0059ABEB mov eax, [ebp+var_10]
.text:0059ABEE call @Sysutils@FormatDateTime$qqrx17System@AnsiString16System@TDateTimerx24Sysutils@TFormatSettings ; Sysutils::FormatDateTime(System::AnsiString,System::TDateTime,Sysutils::TFormatSettings &)(打时间码,上传服务器的每张截图都有时间码)
.text:0059ABF3 lea eax, [ebp+var_70]
.text:0059ABF6 push eax
.text:0059ABF7 mov eax, [ebp+var_14]
.text:0059ABFA mov [ebp+var_64], eax
.text:0059ABFD mov [ebp+var_60], 11h
.text:0059AC01 lea edx, [ebp+var_64]
.text:0059AC04 xor ecx, ecx
.text:0059AC06 mov eax, offset dword_59AE00
.text:0059AC0B call sub_421D6C
.text:0059AC10 mov eax, [ebp+var_70]
.text:0059AC13 push eax
.text:0059AC14 mov ecx, 0AAh
.text:0059AC19 mov edx, 1Eh
.text:0059AC1E mov eax, esi
.text:0059AC20 mov ebx, [eax]
.text:0059AC22 call dword ptr [ebx+90h]
.text:0059AC28 mov dl, 1
.text:0059AC2A mov eax, ds:off_586AC8 ; this
.text:0059AC2F call @Jpeg@TJPEGImage@$bctr$qqrv ; Jpeg::TJPEGImage::TJPEGImage(void)
.text:0059AC34 mov [ebp+var_30], eax
.text:0059AC37 xor eax, eax
.text:0059AC39 push ebp
.text:0059AC3A push offset loc_59AC8F
.text:0059AC3F push dword ptr fs:[eax]
.text:0059AC42 mov fs:[eax], esp
.text:0059AC45 mov edx, [ebp+var_2C]
.text:0059AC48 mov eax, [ebp+var_30]
.text:0059AC4B mov ecx, [eax]
.text:0059AC4D call dword ptr [ecx+8]
.text:0059AC50 mov eax, [ebp+var_30]
.text:0059AC53 mov byte ptr [eax+44h], 3Ch
.text:0059AC57 mov eax, [ebp+var_30] ; this
.text:0059AC5A call @Jpeg@TJPEGImage@Compress$qqrv ; Jpeg::TJPEGImage::Compress(void) (压缩图片)
.text:0059AC5F mov dl, 1
.text:0059AC61 mov eax, ds:off_43E42C
.text:0059AC66 call sub_405028
.text:0059AC6B mov [ebp+var_18], eax
.text:0059AC6E mov edx, [ebp+var_18]
.text:0059AC71 mov eax, [ebp+var_30]
.text:0059AC74 mov ecx, [eax]
.text:0059AC76 call dword ptr [ecx+60h]
.text:0059AC79 xor eax, eax
.text:0059AC7B pop edx
.text:0059AC7C pop ecx
.text:0059AC7D pop ecx
.text:0059AC7E mov fs:[eax], edx
.text:0059AC81 push offset loc_59AC96
定位BitBlt函数也是失败的。
只能再换个思路,我在想,既然登陆器要对游戏进程截图,至少在截图前首先定位游戏进程的窗口,因此是否可以进行findwindow()函数的定位找到代码,通过WinDbg拦截还是失败,但是这次,结合登陆器的截图机制,就是时间函数的调用,发现了一个疑似接近截图的地方。
这其中进行过Settimer函数的定位,发现定期截图(其实是离散时间的,控制在一定时间内)并不是通过这个函数实现的。
但是,跟踪Gettickcount函数就可以在截图之前进行程序的拦截,说明这一次起码能控制截图的实现了。代码在这里:
00602798 loc_602798: ; CODE XREF: .text:00602785↑j
.text:00602798 call GetTickCount_0
.text:0060279D sub eax, ebp
.text:0060279F cmp edi, eax
.text:006027A1 jnb short loc_60280D
.text:006027A3 mov eax, [ebx+0Ch]
.text:006027A6 cmp byte ptr [eax+2BEh], 0
.text:006027AD jnz short loc_6027D1
.text:006027AF mov eax, [ebx+0Ch]
.text:006027B2 mov byte ptr [eax+2Ch], 0
.text:006027B6 mov eax, [ebx+0Ch]
.text:006027B9 call sub_602214
.text:006027BE mov [esp+4], al
.text:006027C2 mov eax, [ebx+0Ch]
.text:006027C5 mov eax, [eax+34h]
.text:006027C8 mov dl, 1
.text:006027CA call unknown_libname_848
006027B9 之前断下,登陆器不会截图;跳过这个代码,下一处断下,就有截图了,说明text:006027B9 call sub_602214,是控制截图的代码实现的。
对于有经验的朋友,其实很容易跟进去发现的,但对于我来说第一次跟踪到这里时,有点不识庐山真面目了;因为我一直困惑,截图功能究竟是登陆器实现的还是游戏实现的,如果在这里能控制截图的话,是不是就是登陆器实现的?那对登陆器进行文件和图片的拦截是能够成功的,问题在于之前几次尝试并未成功;所以,这次真的有点懵了。
而且,截图后的图片是保存在游戏文件路径下的;可以确定的是截图功能就是游戏进程实现的;但是登陆器要对是否截图、什么时候截图、截图后读取截图(还要删除)等进行控制。
那这个过程怎么才能实现呢?我在想,既然游戏实现截图,是否自身就带有截图功能,如此来说就简单了。经过查资料,发现还真有,就是通过快捷键完全可以截图,截图保存路径和命名方式完全和登陆器是匹配的。那就简单了,其实就是通过登陆器模拟一次键盘截图操作就可以了,通过消息传递给游戏进程告诉游戏该截图了,然后等待一段时间,等游戏截图完成,再读取截图上传服务器就可以了。跟进上文的那个地址代码:
00602214 sub_602214 proc near ; CODE XREF: .text:006027B9↓p
.text:00602214 ; sub_60338C+2F↓p
.text:00602214 push ebx
.text:00602215 push esi
.text:00602216 xor ebx, ebx
.text:00602218 push 0 ; lpWindowName
.text:0060221A push offset off_602264 ; lpClassName
.text:0060221F call FindWindowW
.text:00602224 mov esi, eax
.text:00602226 test esi, esi
.text:00602228 jz short loc_60225E
.text:0060222A push 0 ; lpWindowName
.text:0060222C push offset off_602264 ; lpClassName
.text:00602231 call FindWindowW(查找游戏窗口)
.text:00602236 mov esi, eax
.text:00602238 push 3F0001h ; lParam
.text:0060223D push 74h ; wParam
.text:0060223F push 100h ; Msg
.text:00602244 push esi ; hWnd
.text:00602245 call PostMessageW (模拟按键)
.text:0060224A push 0C03F0001h ; lParam
.text:0060224F push 74h ; wParam
.text:00602251 push 101h ; Msg
.text:00602256 push esi ; hWnd
.text:00602257 call PostMessageW (模拟松开)
.text:0060225C mov bl, 1
.text:0060225E
.text:0060225E loc_60225E: ; CODE XREF: sub_602214+14↑j
.text:0060225E mov eax, ebx
.text:00602260 pop esi
.text:00602261 pop ebx
.text:00602262 retn
.text:00602262 sub_602214 endp

以上代码即为登陆器模拟按键操作,通知游戏进程进行截图。

验证:

发现有两处调用此处代码,把这两处屏蔽掉,屏蔽代码的方式有很多,nop掉可以,或者Jmp掉,我用ret把这两处都屏蔽掉的,这样做有个好处,只改这个函数内的第一个代码就可以实现两处调用全部屏蔽,而且保证原来的寄存器数据安全,因为nop和Jmp可能会涉及到数据安全问题,导致程序发生异常。(不知道这样想对不对)
下面是修改后的代码:
t:00602214 locret_602214: ; CODE XREF: .text:006027B9↓p
.text:00602214 ; sub_60338C+2F↓p
.text:00602214 retn 原先是push ebp
.text:00602215 ; ---------------------------------------------------------------------------
.text:00602215 push esi
.text:00602216 xor ebx, ebx
.text:00602218 push 0 ; lpWindowName
.text:0060221A push offset off_602264 ; lpClassName
.text:0060221F call FindWindowW
.text:00602224 mov esi, eax
.text:00602226 test esi, esi
.text:00602228 jz short loc_60225E
.text:0060222A push 0 ; lpWindowName
.text:0060222C push offset off_602264 ; lpClassName
.text:00602231 call FindWindowW
.text:00602236 mov esi, eax

这样,运行登陆器,发现不会截图了。就这样,破解登陆器的截图反作弊就基本实现了第一步;但是这样有个问题,就是很容易被服务器发现的,因为服务器没有截图,是会被怀疑作弊的。
那怎样实现反反作弊呢?这个问题就有意思了。其实相关代码找到了,实现反反作弊也是完全可能的,这里我只说一下自己的思路,其实就是在通知截图之前先把作弊器关掉就可以,截图完成后再开启,就完全能够躲避反作弊的。但是我个人不建议这样做,毕竟文明游戏才是正道。尤其对于为数不多的还有人玩的经典游戏,作弊就更没必要了。

5.登陆器是多线程的,这样设计有个好处

loc_406B9C:
mov ds:byte_670059, 1
mov eax, [ebp+lpThreadId]
push eax ; lpThreadId
mov eax, [ebp+dwCreationFlags]
push eax ; dwCreationFlags
push ebx ; lpParameter
mov eax, offset unknown_libname_50 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
push eax ; lpStartAddress
mov eax, [ebp+dwStackSize]
push eax ; dwStackSize
mov eax, [ebp+lpThreadAttributes]
push eax ; lpThreadAttributes
call CreateThread
mov esi, eax
test esi, esi


这是几处dephi线程调用的入口,跟踪发现,登陆器的玩家信息(界面右边的窗口显示区域)是独立线程操作的,截图和上传功能也是独立线程操作的,但是在对线程下断点时,发现登陆器容易发生线程调用异常错误,估计是线程间通信被中断导致的句柄错误(不知道对不对)。

感悟:
代码定位如果一个思路不行,就多换几个思路,在可能性最高的地方下断点进行拦截分析,能够节省不少时间;
每一种编译平台对代码的处理方式均有自己的方式,尤其是Dephi;
实践和理论结合起来,就能成长的更快;
多来看雪论坛,学到更多知识;
因为我是小白,文中定有不少漏洞和错误,希望大佬给出指正;
感谢平台。
最后,我有个问题:我这算不算入行了啊?

我是出于对反作弊代码实现的好奇,和想知道这款软件中有无恶意代码,所以想跟踪一下;同时声明本次破解并无恶意,仅仅是作为一次尝试和练习的过程。
我是真正的0基础开始学习,并无编程经验,也非IT魔界人士,只是对计算机安全感兴趣,看过不少相关资料的书籍;也经常浏览看雪论坛中各位大神的技术分享,收获颇丰,本次就自己斗胆尝试了一下破解的过程。
当然,这次破解我选择的破解对象也比较简单,如果您是高手的话完全可以路过的。下面是这款游戏(Cs1.5)反作弊登陆器的界面:
我是出于对反作弊代码实现的好奇,和想知道这款软件中有无恶意代码,所以想跟踪一下;同时声明本次破解并无恶意,仅仅是作为一次尝试和练习的过程。
我是真正的0基础开始学习,并无编程经验,也非IT魔界人士,只是对计算机安全感兴趣,看过不少相关资料的书籍;也经常浏览看雪论坛中各位大神的技术分享,收获颇丰,本次就自己斗胆尝试了一下破解的过程。
当然,这次破解我选择的破解对象也比较简单,如果您是高手的话完全可以路过的。下面是这款游戏(Cs1.5)反作弊登陆器的界面:
 
 
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 0
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
膜拜中。。。。
2021-1-29 21:54
0
雪    币: 258
活跃值: (1747)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2021-2-23 15:36
0
雪    币: 258
活跃值: (1747)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Remoter 搞cs1.6反作弊为啥不去豆客上班呢
2022-6-8 12:42
0
游客
登录 | 注册 方可回帖
返回
//