2019-08-10-Gal反汇编指南

2019-08-10-Gal反汇编指南

进度表:

项目 完成
cs2特制补丁
解包剧本
go编译开源工具
OD语区修改
OD边界检查

#教程&案例一

前面照着来就行了。

补充:Go 安装 golang.org/x/text 出错

mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/text.git

就把这个录成了视频
Ollydbg修改字符编码和边界检查代码.mp4

工具地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
0051217E  |.  3C 81         cmp al,0x81
00512180 |. 72 04 jb short cs2.00512186
00512182 3C 9F cmp al,0x9F
00512184 76 08 jbe short cs2.0051218E
00512186 |> 3C E0 cmp al,0xE0
00512188 |. 72 1D jb short cs2.005121A7
0051218A |. 3C EF cmp al,0xEF
0051218C |. 77 19 ja short cs2.005121A7
0051218E |> 8A41 01 mov al,byte ptr ds:[ecx+0x1]
00512191 |. 3C 40 cmp al,0x40
00512193 |. 72 04 jb short cs2.00512199
00512195 3C 7E cmp al,0x7E
00512197 |. 76 08 jbe short cs2.005121A1
00512199 |> 3C 80 cmp al,0x80
0051219B |. 72 0A jb short cs2.005121A7
0051219D 3C FC cmp al,0xFC
0051219F |. 77 06 ja short cs2.005121A7

检查的含义大概如下:
(xor代表出错,mov 1 代表成功)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
第一字节:

81-:xor

81-9F:下一字节检查

9F-E0:xor

EF+:xor

E0-EF:下一字节检查

----

第二字节:

40-:xor

40-7E:完成

7E-80:xor

FC+:xor

80-FC:完成

hint

当修改上界9F和7E为FE之后即可检查成功。

说完第一个案例之后,说说第二个吧。

#案例二

相关的文章:

基础

内功提高篇

工具

真相大白

关于内存写入部分,需要辅助学习的就是 OllyDbg入门完全教程.pdf 和 OD入门系列图文详细教程.pdf。

掌握汇编之后,还需要API(MSDN文档)

一般来说,解包封包可能都有写的了,就是一些工具可能需要自己实现。

EnumFontFamiliesEx就是初始化 选择字体的函数,告诉程序有那些字体可用,CreateFont 用来创造字体
其中也包括 character set
这些就是要修改的 BOSS
总的来说就是要修改程序的 CreateFont 或者CreateFontIndirect 还有EnumFontFamiliesEx
将character set 改为 中文,这样染红就可以显示中文了

针对读取外部配置,大佬说了用Process Monitor。启动 capture EVEN 捕捉事件,最后就搞明白了。

#ONE ~輝く季節へ FullVoice 汉化实战篇[完]

这里由于较早,都是自己造轮子。

用Ollydbg调试游戏程序one.exe并在调用ReadFile处下断点,分析读取one.lst或soundPackSEVo.lst后的数据处理(具体的操作不作说明),可以得出lst文件的解密方法如下

参照这段文字,可知Ollydbg调用资源的过程就可以解答如何解包了。关键就是,如何调用ReadFile?另外,搜索所有的参考文本字符串ogg。

解包基本都有工具完成了。后面就是解密。解密也还是可以用OD。

汉化这个脚本就是要把日文的文本替换成中文的翻译文本,同时把文本的长度换成翻译后的实际长度。

程序内文字修改:长度比原文短的用00填充,但不可以超出原文的长度。

MSDN查询手册:

createfontindirecta

win32 api-index-portal

library

字符集比较绕,
游戏中调用的系统函数CreateFontIndirectA需要传入调用的参数,参数LOGFONT里面有lfCharSet,在程序的exe里面就有80这个值,作为传入的参数结构体中的lfCharSet。改写成86就能让程序自己传入86。CreateFontIndirectA参考上设置断点就是让程序在调用这个函数时停下来让程序员找到80的地方。博主定位这个传入的方法是写入自己的ASCII字符串定位,而其他则是肉眼找。mov byte ptr ds:[ebx+17],80是变址寻址。

image.png


以上就是基本流传广泛的几种常见策略。下面是一些不那么容易找的资料。

#大作业

未开始。。。

#文件读写精\

正在完成。。。

配合此文更佳

配合此文更佳

#BGI实战

未开始。。。

聚聚一

聚聚二

OllyDbg中文帮助文档


没意义的