反编译 Java 小法式,而且改变为代码都很难,人们为了寻找隐藏的动静经常丢失在 java 代码中。一种办法就是打乱行号,替代所有的 classes 的名称, 办法和变量,我们 将会发现我们所需要的:字符串加密。
阐发代码你所需要的东西:
- Java 反编译器 (例如:JAD)
- 编纂东西 (例如:vim)
- 觉得才能 (例如:大脑)
更好可以有些 JVM 的常识, 不外不懂也不消担忧,在那儿我会把一切都告诉你的。
但是想要造做你本身的破解法式,你就必然需要那些常识了。
要做弊 Java 游戏,你所需要的东西:
- TCP 嗅探器 (例如:tcpdump)
- 撑持 Java 的阅读器 (例如:Mozilla)
- C 编译器 (例如:gcc)
- GNU 的东西 (例如:grep)
- 撑持 PHP 的办事器 ;-)
第一步:是什么呢?
当然是寻找破解的目的喽 :) 在 Coca~Cola’s 主页上的游戏看起来不错(nordic)。
翻开 TCP 嗅探器(tcpdump -w file), 运行游戏。玩一会,然跋文录你的分数。TCP 嗅探器能够停行了。翻开记录文件(vi file)。在文件中寻找你的分数,你应该看到那一行:
GET /magazine/servlet/SetHighscoreServlet?score=6324game=0cookie=yournamemd5=c404cd019e1a214487cd4c841
我们所要处理的就是 md5 的数值是怎么生成的,那么我们就能够做弊,本身加分数了。
第二步:反编译和阐发
下载游戏的 。jar 文件夹(提醒: 查看源文件,
标签中的 archive=。。。), 解开后,反编译每一个 class 文件。如今试着在代码中查找返回数据到办事器的处所
(fgrep -rn "URL" *)。
b/a/a。java 的第 122 行 (用 jad 反编译的成果) 看起来能够做为我们起头的处所:
URL url = new URL(c, b("L9\001 qMdK|)\016rZ!\f\007cfg8\ndMa-\007DK|)
\016rZ1,\001x\\kb") + Integer。
toString(i) + b("DpOc:_") + d + b("DtA
a4\013r\023") + e + b("DzJ;b") + a。a。a。a。a。a(i, Integer。parseInt(d), e));
URL 看起来是如许的:
"long text"+i+"text"+d+"text"+e+"text"+result_of_calculation(i,d,e)
如今的问题是"那些是不是我们看到的字符串?"(没关系张嘛~) 和 " a。
a。a。a。a。a() 都干了些什么?"。
翻开文件 (vi b/a/a。java) 到 122 行。我们能够看到加密字符串的办法是 b() 。 查看 b() (line 224)。是如许的:
224:
private static String b(String s)
225:
226:
char ac[];
227:
int i;
228:
int j;
229:
ac = s。
toCharArray();
230:
i = ac。
length;
231:
j = 0;
232:
goto _L1
233: _L9:
234:
ac;
235:
j;
236:
JVM INSTR dup2 ;
237:
JVM INSTR caload ;
238:
j % 5;
239:
JVM INSTR tableswitch 0 3: default 76
240:
0 52
241:
1 58
242:
2 64
243:
3 70;
244:
goto _L2 _L3 _L4 _L5 _L6
245: _L3:
246:
0x62;
247:
goto _L7
248: _L4:
249:
23;
250:
goto _L7
251: _L5:
252:
46;
253:
goto _L7
254: _L6:
255:
14;
256:
goto _L7
257: _L2:
258:
95;
259: _L7:
260:
JVM INSTR ixor ;
261:
(char);
262:
JVM INSTR castore ;
263:
j++;
264: _L1:
265:
if(j
全数