家园7吧 关注:21,089贴子:81,389

关于家园7的so文件修改教程

只看楼主收藏回复

首先申明一点,本人并非程序员,只是兴趣使然做了个教程。而且大部分教程在吧里都能看到,这里感谢之前吧里多位大佬的付出。最后如果你觉得教程很麻烦,或者没达到你的预期,你可以选择退出去,因为我并非程序员,很多问题我是没法回答。关于版本:家园7,重建王国pc,重建王国手机版这三个是一脉相承,重建王国pc版可见我上一个帖子,重建王国可参考两个帖子。


IP属地:福建1楼2024-07-07 15:21回复
    首先我们需要一部手机和一个电脑。还有需要一个手机应用np管理器(免费),或者mt管理器(16进制编辑我记得要开会员才行)。还需要在电脑上安装ida pro。


    IP属地:福建2楼2024-07-07 15:27
    回复
      接着我们来看一下一些基本的路径,这里我选择的安装包是网上随便下载的1.14.5版本的家园7。在电脑上,将apk文件解压,就会得到一个文件夹。由于本次教程是修改libmain.so文件,其它教程吧内已有教程,可自行查找。打开lib文件夹,这时候就会出现四个文件夹,分别是arm64-v8a,armeabi-v7a,x86,x86_64。这个是很重要的点,由于根据不同手机的处理器不一样,应用会调用不同的文件夹下的so文件。简单来说,现在主流手机基本上是调用arm64-v8a文件夹,而以前主流手机是调用armeabi-v7a文件夹。x86和x86 64比较冷门而且我手头没有对应设备无法验证。接下来的教程将分为arm篇和armeabi篇。



      IP属地:福建3楼2024-07-07 15:38
      回复
        arm篇。
        首先打开ida,推荐用64位版本,然后会弹出一个选择的窗口,初次的窗口和第二次界面会有所不同,但是选项一样,选择新建,在弹出的文件选择窗口中选择apk解压的出来的文件,路径:家园7\lib\arm64-v8a,选择libmain.so文件。然后会弹出一个选项窗口,直接点确定就行。接着就会进入程序主界面。上方有一个条子,表示解析的进度,左下角有个输出窗口。当上方的条子不在发生变化,出现系统提示音和左下角窗口出现finished字样,即可开始进行下一步工作。





        IP属地:福建4楼2024-07-07 15:55
        回复
          接着调整界面,将结构体和枚举两个窗口关闭。长按16进制视图窗口可以拖动,这时候程序会出现多个标记点选择一个合适位置拖动过去即可,我选择右侧。点击中间窗口,右键 同步》十六进制窗口,勾选。这样我们点击中间窗口时候,右边的十六进制也会同步显示。以上这些步骤可以不做,但是做了后续修改会更加舒适。



          IP属地:福建5楼2024-07-07 16:05
          回复
            接下来就是住宅的人口修改,在游戏中住宅英文是townhouse,但是代码中的注释并不是。通过重建王国pc的文件可知,住宅的注释应为residence,通过图片里显示从上到下分别是2,3,4,5人口的住宅。点击ida中间窗口,然后快捷键alt+T,输入residence0,勾选查找所有事件,然后确定。等待一会儿后会弹出新的窗口显示结果。将窗口移至某个地方方便查找。每个搜索结果前面都会有地址,而建筑属性的地址都集中text字段,所以在排序后寻找搜索结果text地址的结果。接下来就是挨个查找我们需要的结果,当双击结果以后,中间的窗口就会跳转到对应的函数段落。此时还会出现分段,并且在左下角出现一个分段的缩略图。如果没有出现,点击中间窗口后按下空格即可切换。由于家园中的大部分建筑都能升级,这会使缩略图出现一个比较明显的三段平行的分段代码。以5人口住宅为例,左下角显示出大量的分段且有三段平行的代码,基本上可以确认为建筑的数据所在位置,但是只有这一个判断并不准确,部分建筑的三段平行代码显示为较为抽象,这时候需要第二个判断方法,占地面积。






            IP属地:福建6楼2024-07-07 16:31
            收起回复
              在缩略图点击位置即可快速移动至该位置,点击函数最上面的分段,在第一个分段函数有连续三行显示2,2,2。看来判断出现错误,这个是2人口的住宅,第一个2就是人口,后面两个2代码的是占地面积。其它建筑一般只显示两行函数,非建筑代码不会显示这两行,当然部分非住宅建筑会显示三行代码,除开占地面积代码剩下那个目前也没搞清楚什么作用。基本上依靠三段平行代码和占地面积就能判断这段函数是不是建筑属性代码。在标记4那里灰色字样就是注释,因为有大量建筑的占地面积相同,注释那里可以帮助分析该函数属于哪个建筑。除开住宅注释和英文名不一样,剩下的建筑和英文名一样。


              IP属地:福建7楼2024-07-07 16:53
              回复
                既然找到人口的代码标记位置,接下来就是修改,选中MOV W3, #2这行代码,然后右键》快速修补神器》修补,就会弹出一个窗口,因为arm文件中10进制转换成源码的方式未知,目前只能这样修改。修改输入汇编中的数字2,下面的代码也会随之变化,将变化后的代码记住,这里以50人口为例。接着打开手机,打开np管理器,定位到你家园7的安装包,假如你不知道安装包的位置或者没有安装包但是有家园7。点击np左上角,选择安装包提取,找到家园7并点击,选择提取安装包,出现提示后选择定位,就能看到安装包了。然后点击安装包,在弹出来的窗口中选择查看,然后按照前面的路径找到so文件并长按,在弹出的界面选择十六进制编辑,就会进入Hex编辑器。










                IP属地:福建8楼2024-07-07 17:16
                回复
                  接着返回ida,选中MOV W3, #2后,看中间窗口的左下角,那里显示目前代码的地址为961250,左边的16进制显示原代码43 00 80 52。在手机上Hex编辑器上点击右上角,选择 跳转到...,输入961250且十六进制打钩,点击确认就成功跳转,将43 00 80 52 改成 43 06 80 52即可,点击右上角保存按钮后退出。在弹出的提示选择确定。然后再退出到安装包所在文件夹,点击安装包,选择安装,安装完成后打开游戏。看见第一个2人口住宅没有变化,再看第二个2人口住宅,发现这个变成50了,说明修改成功。










                  IP属地:福建9楼2024-07-07 17:43
                  回复
                    但是人口为2的住宅有两个,在不知道另一个住宅的序号情况下如何判断呢,在刚刚举例的住宅中可以看到建造费用为250金币和15个木板,然后我们打开ida,定位到三段式,因为建造要的材料一般会比升级所需材料的种类少,而且升级时部分参数变化也会记录在三段式中。所以一般情况下,最短的那个就是建造。接着看到分段有几个16进制浮点数。通过转换437A0000=250,42FA0000=125,42700000=60,还有一个浮点数15.0。其中有两个数据是能对的上,能通过该方法分别两种住宅。


                    IP属地:福建10楼2024-07-07 17:54
                    回复
                      但凡事也并非绝对,比如5人口的住宅造价为650金币,转换成16进制浮点数就是44 22 80 00,但是我们在ida中查看时候并不会看见而是会看见
                      MOV W8, #0x8000
                      MOVK W8, #0x4422,LSL#16这样的句式,其实这就是44228000的另一种表达式。之所以要把教程分为arm篇和armeabi篇,因为之前armeabi中暂时未发现这种情况。


                      IP属地:福建11楼2024-07-07 18:31
                      回复
                        至于科技位置的查找,在 家园7\assets\l10n的文件夹下有一个zh.strings的文件,比如说我们要修改税收增加级别1的代码,所需时间为30,鱼20,金币750。先在zh.strings中搜索 税收增加 就会找到这么一条"T_MOD_TAXES_TITLE" = "税收增加 {LEVEL}";然后在ida中搜索TAXES_TITLE,结果中挨个寻找符合条件的,比如第一个搜索结果的标记1数值41F00000就是30,标记2数值41A00000为20,标记3和4合起来装换后正好750,接着在附近寻找与1.25有关数值,在下面就看见了一个1.25,通过修补进行计算修改后的数值然后在np中修改,经过我的测试,修改数值大于31以后就不会变动,稳妥起见就改为31,然后再安装,进游戏,数值发生了变化。






                        IP属地:福建12楼2024-07-07 19:42
                        回复
                          arm篇基本上就这样,其他修改按照我的思路理论上没什么问题。至于armeabi篇目前有思路,但是莫得验证方法,原先想用模拟器来验证,后面在修改后发现并没有什么效果,可能模拟器调用的是x86或者x86 64的so文件。总结就一句话,armeabi篇咕了。


                          IP属地:福建13楼2024-07-07 19:49
                          回复
                            🐮!


                            IP属地:重庆来自Android客户端14楼2024-07-07 20:33
                            回复
                              看呆了


                              IP属地:辽宁15楼2024-07-07 23:24
                              回复