Mitjavaz 发表于 2015-8-9 18:13:51

Android逆向工程——程序修改

本帖最后由 Mitjavaz 于 2015-8-9 18:19 编辑

       平时,我们玩游戏,都会遇到这样的情况,爆破了收费,但是只是将游戏买断了罢了,而游戏没有其他增值,以至于很多时候,我们玩游戏还是觉得不那么简单,反而很困难。从而,又出现了爆破加修改版这样形式的游戏出现。

       不过对于玩家的需求,市场上普遍的金钱修改,已经无法满足,甚至于将游戏的可玩性大大降低,甚至于令游戏直接无挑战性,也就失去了娱乐意义。

举例:
游戏类型:模拟经营类
游戏名称:开罗百货商店开店日记
       像这款游戏,游戏经营只是一种模式,而更多的是挑战游戏的经营极限,挑战最终的那个排行榜。而在市场上能找到的,则是存档式的修改,而这样就会严重导致最终排行榜的成绩失去了最终的挑战意义。
       下面,我就以这款游戏,做一个此方面的小修改。
       目的:
1、让游戏的上手难度降低的同时,又不失去过多的游戏趣味。
2、让新手知道数据类型的取值范围。
       下面,开始进入我们的主题。


       首先,进入游戏得到一些关键词,我这里找到的是“狂热期结束”这个关键词。
       这款游戏,当人气累加到100的时候,游戏内的客户就会进入狂热期,从而进行大肆购买的状态。
       然后,我们用Android Killer将游戏反编译打开,通过字符串搜索,找到关键词所在的类。

       进入到所在的类,并且通过软件提供的JAVA源码查看工具查看源码。


       此时我们进行源码分析:
       首先,我们先把关键词所在的条件语句圈画出来,然后才进一步去分析整个程序是如何执行运作下去的。

    if (A == 1)       //第一句IF条件语句
    {
      int i2 = 1 + B;
      B = i2;
      if (i2 >= 1200) //第二句IF条件语句
      {
      A = 0;
      B = 0;
      b.f.a();
      int i3 = b.f.h();
      if (i3 == 0) {
          i3 = 1;
      }
      x = 100 * (b.n.a(100 * this.n / i3, 0, 2000, 0, 35, true) + b.n.a(0, 0, 5, 0, 15, true));
      this.au.d.a("狂热期结束。", 15);
      this.au.d(3);
      }
    }

       我们第一眼望过去,就是离狂热期结束最近的这个IF语句,即:第二句IF条件语句,意思非常明确,就是条件满足,狂热期就结束。
       那么第一句IF条件语句,我们第一眼看不出来,但是分析一下,还是能猜得出,这是一个判断状态的条件,若条件满足,则代表进入了狂热期这个状态,紧接着就是到第二条IF语句,去判断狂热期是否到了结束的时候。
       归纳一下程序大致流程:
1、通过第一条IF语句去判断购物状态是否为狂热期购物状态。
2、通过第二条IF语句去判断狂热状态的时间是否为结束狂热期购物状态。
       既然第二条是判断后执行结束狂热期状态的语句,那么我们看一下这第二条IF条件语句是怎么写判断条件的。
       if (i2 >= 1200)
       原来条件是判断一个变量名为i2的变量是否大于等于(>=)常量1200。
       那么,思路就出来了,既然是1200,既然是一个常量,那么我扩大这个常量的数值,是否就意味着延长了狂热期,让将执行“狂热期结束”这个操作就往后推延了。
       得到思路,那么就进入Android Killer,往里面找到1200这个数值,因为在android这个反编译的字节码里面,1200是以16进制显示,而1200是十进制的方式,十进制转十六进制后,1200就变为:0x4b0。

       将这个数值扩大即可,然后保存编译。
       最终测试情况就是这样:

      
       下面,留一个近似于作业的话吧,就是说,除了这种方式,还有没有其他方式去实现延长甚至永久保留此种状态的操作。
      
       另外,还有一点,就是在本文之中,各位有没有去注意在最后修改数值的一点细节问题。
      
      这个细节,有兴趣或者是发现了又或者是其他情况,想知道的,麻烦回复一下吧,谢谢各位支持了。
**** Hidden Message *****


       好了,本文就到此结束了。
       希望各位爱好修改的朋友们,能在修改的同时,尽量别影响了游戏的娱乐性和趣味性,不然游戏会失去了游戏必有的存在价值和意义了。


致谢:逆向未来技术社区


xin 发表于 2015-8-9 21:10:05

有没有在手机端修改的

yyj85391 发表于 2015-8-10 06:54:39

我去试试!!!

听鬼哥说故事 发表于 2015-8-10 09:56:58

已置顶,欢迎楼主的文章,期待新作~~~~~~~~

水波摇曳 发表于 2015-8-10 09:59:32

本帖最后由 水波摇曳 于 2015-8-10 14:08 编辑

回头细看..看能不能发现新知识
楼主大赞{:5_121:}



---------
其实在赋值的时候可能会遇到范围的问题,
这时候 只需要直接使用const 不用限定符就可以了;
比如你要辅助999
只需要下面写:
const v0, 0x3e7

A00 发表于 2015-8-10 10:00:08

支持原创作品,感谢lz的修改教程

越狱 发表于 2015-8-10 10:01:04

收藏备用

peterdocter 发表于 2015-8-10 10:02:18

不久又一个大牛将要诞生{:5_144:}

sndncel 发表于 2015-8-10 19:48:12

呵呵。。。。。。。支持一下呀。

ccxsaber 发表于 2015-8-11 16:42:52

嗯,谢谢分享,学习一下
页: [1] 2 3 4 5 6
查看完整版本: Android逆向工程——程序修改