首页
社区
课程
招聘
屏蔽EXE命令行参数
发表于: 2007-3-11 15:58 4569

屏蔽EXE命令行参数

2007-3-11 15:58
4569
晕,内容没上去,重发一下:
有一游戏,无壳.如果加上-badnews参数启动游戏,在游戏中按ctrl+tab键,就会激活作弊模式,并在屏幕上显示:Cheats Enabled.我想屏蔽这个参数,怎么做?我用W32Dasm找到了相关部分.但由于一运行到这些部分,游戏会运行,无法动态调试.所以请各位老大帮忙看一下:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041BFEF(C)
|
:0041C078 8B0B                    mov ecx, dword ptr [ebx]

* Possible StringData Ref from Data Obj ->"--badnews"
                                  |
:0041C07A 6858164B00              push 004B1658
:0041C07F 51                      push ecx
:0041C080 E8EB540700              call 00491570
:0041C085 83C408                  add esp, 00000008
:0041C088 85C0                    test eax, eax
:0041C08A 7516                    jne 0041C0A2
:0041C08C B900080000              mov ecx, 00000800
:0041C091 E8AA4A0000              call 00420B40
:0041C096 EB0A                    jmp 0041C0A2

* Possible StringData Ref from Data Obj ->"CCheats Enabled"
                                  |
:004214DB BA88C14B00              mov edx, 004BC188
:004214E0 33C9                    xor ecx, ecx
:004214E2 E8D9CA0500              call 0047DFC0
:004214E7 E9BBFDFFFF              jmp 004212A7
:004214EC E8EF250100              call 00433AE0
:004214F1 85C0                    test eax, eax
:004214F3 0F85AEFDFFFF            jne 004212A7
:004214F9 B908000000              mov ecx, 00000008
:004214FE E8CD610000              call 004276D0
:00421503 8BCF                    mov ecx, edi
:00421505 E8A6FBFFFF              call 004210B0
:0042150A E998FDFFFF              jmp 004212A7
:0042150F E84CF6FFFF              call 00420B60
:00421514 85C0                    test eax, eax
:00421516 0F848BFDFFFF            je 004212A7
:0042151C E8BF250100              call 00433AE0
:00421521 85C0                    test eax, eax
:00421523 7435                    je 0042155A
:00421525 BB01000000              mov ebx, 00000001
:0042152A BE7C1B5500              mov esi, 00551B7C
:0042152F 8BFB                    mov edi, ebx

我不会查找键盘的ctrl+tab的相关内容

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
建议用OD,加入你的参数,在按键消息处设置断点,再细跟踪
2007-3-11 17:55
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
那个游戏是黑背景,一但有断点运行,他就会挡住屏幕,用ALT+TAB键返不回桌面,只有凭感觉用ALT+TAB切换窗口,用ALT+F4强关游戏和OD才行...
而无断点的正常运行,可用ALT+TAB键返回桌面
2007-3-11 18:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我出一点子,用双显示器,不就行啦
2007-3-11 19:52
0
雪    币: 50161
活跃值: (20610)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
先google搜索资料,看看命令行编程如何实现的,再找切入点。
例如,一般用GetCommandLine等
2007-3-11 20:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学知识来的~谢谢哦
2007-3-11 23:47
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 kanxue 发布
先google搜索资料,看看命令行编程如何实现的,再找切入点。
例如,一般用GetCommandLine等


嗯,因为以上代码均是游戏已进入界面时的代码,所以很难跟踪.
我在GetCommandLine后找到了一些代码:
* Reference To: KERNEL32.GetCommandLineA, Ord:00AAh
                                  |
:0049365E FF15FCB04A00            Call dword ptr [004AB0FC]
:00493664 A3706B5500              mov dword ptr [00556B70], eax
:00493669 E802640000              call 00499A70
:0049366E A3BC545500              mov dword ptr [005554BC], eax
:00493673 85C0                    test eax, eax
:00493675 7409                    je 00493680
:00493677 A1706B5500              mov eax, dword ptr [00556B70]
:0049367C 85C0                    test eax, eax
:0049367E 750A                    jne 0049368A

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00493675(C)
|
:00493680 6AFF                    push FFFFFFFF
:00493682 E8A9DDFFFF              call 00491430
:00493687 83C404                  add esp, 00000004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0049367E(C)
|
:0049368A E831610000              call 004997C0
:0049368F E83C600000              call 004996D0
:00493694 E867DDFFFF              call 00491400
:00493699 8B35706B5500            mov esi, dword ptr [00556B70]
:0049369F 89759C                  mov dword ptr [ebp-64], esi
:004936A2 803E22                  cmp byte ptr [esi], 22
:004936A5 0F85BE000000            jne 00493769

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004936C9(C), :004936CF(U)
|
:004936AB 46                      inc esi
:004936AC 89759C                  mov dword ptr [ebp-64], esi
:004936AF 8A06                    mov al, byte ptr [esi]
:004936B1 3C22                    cmp al, 22
:004936B3 741C                    je 004936D1
:004936B5 84C0                    test al, al
:004936B7 7418                    je 004936D1
:004936B9 25FF000000              and eax, 000000FF
:004936BE 50                      push eax
:004936BF E8AC5F0000              call 00499670
:004936C4 83C404                  add esp, 00000004
:004936C7 85C0                    test eax, eax
:004936C9 74E0                    je 004936AB
:004936CB 46                      inc esi
:004936CC 89759C                  mov dword ptr [ebp-64], esi
:004936CF EBDA                    jmp 004936AB

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004936B3(C), :004936B7(C)
|
:004936D1 803E22                  cmp byte ptr [esi], 22
:004936D4 7504                    jne 004936DA
:004936D6 46                      inc esi
:004936D7 89759C                  mov dword ptr [ebp-64], esi

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004936D4(C), :004936E8(U), :0049376C(C)
|
:004936DA 8A06                    mov al, byte ptr [esi]
:004936DC 84C0                    test al, al
:004936DE 740A                    je 004936EA
:004936E0 3C20                    cmp al, 20
:004936E2 7706                    ja 004936EA
:004936E4 46                      inc esi
:004936E5 89759C                  mov dword ptr [ebp-64], esi
:004936E8 EBF0                    jmp 004936DA

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004936DE(C), :004936E2(C)
|
:004936EA C745D000000000          mov [ebp-30], 00000000
:004936F1 8D45A4                  lea eax, dword ptr [ebp-5C]
:004936F4 50                      push eax

在一边加参数一边调试后,我大概看懂了...因为GetCommandLine获得的数据是以下格式的字符串:
"盘符\文件夹名\EXE文件名" -badnews
所以程序中是这样将EXE路径和参数分开的.先逐一比较"并堆栈,比较到第二个"时,再比较空格(去空格),然后就获得了-badnews
我是这样改得,将:
004936E0 3C20                    cmp al, 20
改为:
004936E0 3C2D                    cmp al, 2D

这样就成了比较-(去掉了-),获得成了badnews堆栈.
游戏运行时,确实起到了屏蔽作弊模式的目的.但又出现了2个问题:
1、有时游戏进入或退出时,会出来WINDOWS常见的那个,发送不发送错误报告的对话框.
2、游戏的有一些功能出现了异常.
我只改了一个参数呀,且观察没有发现影响到别的变量和堆栈值.所以我又做了测试,只要随便(指把一句不重要的NOP)改一下,游戏也会出现这种情况.一开始我怀疑是EXE监测修改时间的问题,就把时间调成原EXE的修改时间,但不行.这个游戏没有加壳呀...难道这个游戏还监测是不是做了修改?如果修改了故意让程序出错?我用Stud_PE比较了一下原版和修改版的PE值,发现除了CheckSum外,各种参数都一样.难道是CheckSum的问题?CheckSum怎么修改?如果能修改,我修改成原版的值,游戏的问题是不是能解决?
不知我说的,高手们听懂了吗?你们碰到过这种问题吗?我以前曾学将这个游戏免CD,也成功了,但一样是出以上的两个问题。
2007-3-12 01:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不错不错  学习
2007-3-12 02:11
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
高手没来,再顶
2007-3-12 10:49
0
游客
登录 | 注册 方可回帖
返回
//