android捕鱼达人修改方法(反编译、修改、打包)
【转】一步一步带你反编译apk,并教你修改smali和重新打包
【转】⼀步⼀步带你反编译apk,并教你修改smali和重新打包⼀、⼯具介绍:1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同⼀⽬录结合使⽤,⽤来反编译apk,apk重新打包;2.dex2jar:该⼯具作⽤是将classes.dex⽂件,反编译出源码(如果apk未加固),反编译出⽂件,使⽤jd-gui⼯具进⾏查看;3.Auto-Sign:⾃动签名⼯具,将重新打包的apk进⾏签名,如果不签名,⽆法安装使⽤。
⼯具下载地址:(需要3CSDN积分,原本我设置3积分的,不知道为什么涨到16积分了......)使⽤场景:项⽬源码丢失,只有线上apk,并且没有加固,要求修改apk接⼝地址,并且重新打包,再发布。
⼆、⼯具使⽤:解压后⼯具包如图:1.思路:使⽤⼯具dex2jar反编译,并⽤jd-gui⼯具进⾏查看项⽬结构,查看源码,并且找到接⼝地址类,修改接⼝地址;步骤⼀:下载好⼯具,将需要反编译的APK后缀名改为.rar或则 .zip,并解压,如图:得到其中的classes.dex⽂件(它就是java⽂件编译再通过dx⼯具打包⽽成的),将获取到的classes.dex复制到解压出来的⼯具dex2jar-0.0.9.15 ⽂件夹内,在命令⾏下,进⼊到dex2jar.bat所在⽬录,输⼊命令:dex2jar.bat classes.dex效果如下:步骤⼆:运⾏结束后,在该⽬录下会⽣成⼀个classes_dex2jar.jar的⽂件,如图:然后打开⼯具jd-gui⽂件夹⾥的jd-gui.exe,⽤该⼯具打开⽣成的classes_dex2jar.jar⽂件,便可以看到源码了,效果如下:2.思路:apktool,反编译修改smali⽂件,进⾏重新打包,通过⽤jd-gui⼯具找到接⼝地址类后,与相应的smali⽂件进⾏对⽐,修改接⼝地址;下载上述⼯具中的apktool,解压得到3个⽂件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK⽂件放到该⽬录下,如图:打开命令⾏界⾯(运⾏-CMD),定位到apktool⽂件夹,输⼊以下命令:apktool.bat d -f test.apk -o testapktool -f [待反编译的apk] -o [反编译之后存放⽂件夹]如图:反编译之后会得到test ⽂件夹,打开test⽂件夹,⾥边就是反编译出来的各种资源⽂件使⽤jd-gui查看源码找到地址类,然后在smali⽂件⾥找到地址的smali⽂件,更改smali⽂件内接⼝地址。
android捕鱼达人修改方法(反编译、修改、打包)
涉及内容apk反编译代码修改打包重启签名需要的工具jdk:必须的baksmali:classes.dex反编译为smali格式(文本文件,可修改)smali:smali格式编译打包为classes.dex但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助dex2jar:classes.dex转为jar包jdgui:jar反编译并阅读以上工具可以在 / 下载好了,顺序就是把apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。
注意安装时要先删除原来手机里的版本,因为签名不同了,我第一次再这里卡了好久。
以“捕鱼达人海底捞”为例下载这个游戏的apk,fishing_joy_1.apk,和工具放在一起用zip解开fishing_joy_1.apkcopy classes.dex到baksmali的同一目录用baksmali处理为smalijava -jar baksmali-1.2.6.jar -x classes.dex得到out目录,里面是smali文件用dex2jar处理classes.dex为jar包dex2jar-0.0.7.10-SNAPSHOT\dex2jar.bat classes.dex 得到classes.dex.dex2jar.jar这时我们的工作目录下面是这样用jdgui打开classes.dex.dex2jar.jar好了,可以看代码,但还不能直接修改,需要对比着来修改smali文件比如我们通过对比找到控制鱼被打到几率的代码在FishLayer.smaliJava代码1.invoke-static {v4, v5}, Lcom/sg/android/fish/fish/FishFactory;->getProb(II)D2.3.move-result-wide v44.5.invoke-static {}, Ljava/lang/Math;->random()D6.7.move-result-wide v68.9.const-wide/high16 v8, 0x4059最后的0x4059会与random相乘,如果比getProb方法计算的结果小,判断为鱼可以打下来改为0x0,每条鱼都是必中改好后,用java -jar smali-1.2.6.jar -o classes.dex out得到修改后的classes.dex,用这个文件替换fishing_joy_1.apk中的同名文件但这个apk是不能用的,还没有进行重新签名先用keytool生成keystorekeytool -genkey -keystore mykeystore -alias mykeystore -validity 999 把apk中的META-INF删除,再用jarsigner 签名jarsigner -verbose -keystore mykeystore -signedjar fishing_joy_1_signed.apk fishing_joy_1.apk mykeystore先卸载原来手机中安装的这个游戏,再用fishing_joy_1_signed.apk安装最后工作目录是这个样子。
iphone捕鱼达人金钱修改方法
QUOTE:此方法适用于任何版本包括包括最新的1.6.2,适用于iphone/iPad,适用于越狱/未越狱,总结:万能通用!QUOTE:Fishing Joy(捕鱼达人)是iphone/iPad上一款比较经典的捕鱼游戏,其趣味性和游戏性还是很不错的。
游戏中你需要使用大炮射出渔网来捕鱼。
渔网的等级分为7级,级别越高,打到大鱼的几率也越大。
当然,不同级别的渔网每次射击都要消耗相应数量的金币,比如一级渔网,每次射击消耗一个金币,以此类推,七级渔网每次射击需要消耗7个金币。
游戏中内置IAP,可以花费美刀购买金币。
0.99美刀只能购买200个金币,还是比较贵的。
如果金币没有了,又不想花钱买,那怎么办呢?其实系统每分钟返还5个金币,如果离线,则每小时返还20个金币。
当返还的金币累计到200个时,则不会继续返还。
这样玩的还不过瘾怎么办呢?其实我们可以自己修改金币数量。
需要的工具有:1.ITOOLS (iTools.zip)可以把数据库文件从iphone/iPad中直接拷贝的电脑里,即使iphone/iPad没有越狱也可以!2.SQLite Database Browser (SQLite Database Browser.zip)用于修改数据库文件。
(这两个软件请大家自行下载,各大论坛均有)QUOTE:下面具体讲解如何修改:首先进入游戏,玩一会,然后退出游戏,不要最小化,一定要全退!并用数据线将设备连接到电脑,打开ITOOLS。
点击左侧,你的设备下方的“应用程序”,并在右侧找到“捕鱼达人”这个游戏,点击“文档管理”如下图所示。
双击文件夹并进入Documents子目录,这时候可以看到FlashGame.sqlite这个文件,这就是我们要修改的数据库文件了。
将FlashGame.sqlite这个数据库文件copy到电脑中,注意一定要做一个备份,以防止修改数据库文件失败造成游戏进度丢失。
然后在SQLite Database Browser中打开。
Android APK反编译得到Java源代码和资源文件
Android APK反编译得到Java源代码和资源文件一、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件工具下载:地址:/p/android-apktool/downloads/list如下图,途中红圈的两个都要下载。
将上面2个文件解压到同一个文件夹下面,将有3个文件被解压出来,如下图所示打开cmd命令行窗口定位到刚才解压的文件夹下,即apktool.bat所在的文件夹,如下图所示1. 将APK反编译将待反编译的apk文件放到c盘根目录下,特别注意,一定要放到根目录下。
输入反编译命令apktool d c:\xxxxx.apk c:\***文件夹命令行解释:apktool d [要反编译的apk文件] [输出文件夹]如:注意:demo文件夹不能是已存在的文件夹,否则会报错2. 将反编译完的文件重新打包成APK很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
二、反编译apk得到Java源代码工具下载:dex2jar:/p/dex2jar/downloads/listJD-GUI:/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zi p&can=2&q=如下图的两个文件:具体步骤:1. 解压上面两个压缩文件。
2. 从apk文件中解压出classes.dex,将它复制到dex2jar.bat所在的文件夹下3. 命令行下定位到dex2jar.bat所在的目录,然后运行dex2jar.bat classes.dex如图:注:classes.dex不一定要复制到这个文件夹下,在其前面加上路径也是一样的,这里只是为了输命令方便。
如上图所示,看到Done表示成功,将得到下图中红圈内所示的jar文件4. 然后双击jd-gui.exe,打开刚才生成的jar文件,即可看到下图如此,便可看到代码了。
附上上文中所有用到的工具:apk2android.rar在此郑重声明:分享此文,不是为了破解别人的软件,完全是一种学习态度,代码要自己手敲出来才会有感情的。
Android逆向工具篇—反编译工具的选择与使用
Android逆向⼯具篇—反编译⼯具的选择与使⽤作者 | 天天记⼩本⼦上的lilac 来源 | CSDN今天给⼤家介绍⼀下Android App 在Java层的逆向⼯具。
逆向⼯具的介绍在过去,当我们想要了解⼀个 app 内部运作细节时,往往先通过 ApkTool 反编译 APK,⽣成 smali 格式的反汇编代码[1],然后⼤佬和⽼⼿直接阅读 smali 代码,适当的进⾏修改、插桩、调试,经过⼀定的经验和猜想,理解程序的运⾏逻辑和加解密细节,⽐如如下的 smali 代码。
smail我们只要先这样,再那样,最后再这样,对对对,就这样,⼀个程序的加密就被破解出来了。
是不是迫不及待想来⼀次App的逆向之旅了?事实上,这种⽅式对⼩⽩实在不友好,有没有更加友好的⽅式呢?当然是有的,如果你百度或者 google 搜索逆向相关的教程和分享,很容易就会发现下⾯这三个⼯具。
在介绍⼯具之前,我们先补充⼀下APK结构的知识,我们以伊对这个社交 Apk 为例。
APK ⽂件其实是⼀种特殊的 zip 格式,我们可以直接⽤ 360 压缩或者别的压缩⼯具打开。
为了满⾜⾃⾝的功能和设计,⼏乎每⼀个都会在基础的⽂件结构上添加不少东西,但有六个部分是不变的,我们罗列和称述⼀下。
⽂件或⽬录作⽤META-INF/描述apk包信息的⽬录,主要存放了签名信息,配置信息,service注册信息res/存放apk资源⽂件的⽬录,⽐如图⽚、图标、字符串、样式、颜⾊assets/同样是存放apk资源⽂件的⽬录,但和res有差异,和我们关系不⼤resources.arsc资源索引,包含不同语⾔环境中res⽬录下所有资源的类型、名称与ID所对应的信息lib/存放so⽂件,越来越多的应⽤由C/C++编写核⼼代码,以SO⽂件的形式供上层JAVA代码调⽤,以保证安全性,这个⽬录是逆向解密关注的重点classes.dex(⼀个或数个)Android程序运⾏在Dalvik虚拟机上,⽽dex就是Dalvik虚拟机的可执⾏⽂件, 相当于Windows平台中的exe⽂件,通过反编译dex,可以获得apk源码(这个说法不很准确,但⽅便理解)AndroidManifest.xml清单⽂件,包含了App⼤量的的配置信息,⽐如包名、应⽤需要拥有的权限(打电话/录⾳/⽹络通信等等)、以及所有的界⾯和程序组件的信息,⽆法解压apk时直接打开,因为清单⽂件在apk打包过程中被编译成了⼆进制格式⽂件接下来我们介绍以下反编译⼯具,看⼀下反编译⼯具的作⽤⼯具作⽤ApkTool解析resources.arsc,AndroidManifest.xml等⽂件,反编译dex⽂件为smali源码Dex2jar将dex⽂件转化为jar⽂件Jd-gui反编译jar,查看java源码⽐如使⽤ Dex2jar+Jd-gui, 最终得到这样的结果。
反编译APK文件的三种方法(转)
反编译APK⽂件的三种⽅法(转)因为学习Android编程的需要,有时我们需要对⽹络上发布的应⽤项⽬进⾏学习,可是Android项⽬⼀般是通过APK⽂件进⾏发布的,我们看不到源代码,嘿嘿,办法总会有的,⽽且不⽌⼀个...ps:对于软件开发⼈员来说,保护代码安全也是⽐较重要的因素之⼀,不过⽬前来说Google Android平台选择了Java Dalvik VM的⽅式使其程序很容易破解和被修改,⾸先APK⽂件其实就是⼀个MIME为ZIP的压缩包,我们修改ZIP后缀名⽅式可以看到内部的⽂件结构,类似Sun JavaMe的Jar压缩格式⼀样,不过⽐较去别的是Android上的⼆进制代码被编译成为Dex的字节码,所有的Java⽂件最终会编译进该⽂件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。
所有的类调⽤、涉及到的⽅法都在⾥⾯体现到,⾄于逻辑的执⾏可以通过实时调试的⽅法来查看,当然这需要借助⼀些我们⾃⼰编写的跟踪程序。
Google最然在Android Market上设置了权限保护app-private⽂件夹的安全,但是最终我们使⽤修改定值的系统仍然可以获取到需要的⽂件。
⼀、dexdump⽅法dexdump是emulator⾃带提供的查看dex⽂件的⼯具,可使⽤类似这样的命令将dex⽂件dump到txt⽂件中:D:\Program Files\android-sdk-windows-1.6_r1\platforms\android-1.6\tools>dexdump.exe -d classes.dex > spk.dump.txt 得到的⽂件内容,描述了类的信息,但实在是不好读啊~~~~⼆、dex2jar + XJad ⽅法该⽅法是使⽤dex2jar.jar包,将classes.dex⽂件解包成jar,在通过XJad(或者其他class反编译⼯具)进⾏java反编译。
如:1、dex2jar.bat d:\play\classes.dex默认的输出路径同classes.dex,⽣成的⽂件名为classes.dex.dex2jar.jar2、使⽤XJad反编译该jar包之后的使⽤⽅法,⼤家都懂的:)该⽅法的好处在于,通过XJad反编译后,⼤家可直接开到java源⽂件,缺点在于只能反编译出开发时的java⽂件,⽽开发时使⽤的lib包不能反编译出来。
教你如何修改游戏数据!![申精]绝对原创手打
教你如何修改游戏数据!! [申精] 绝对原创手打本人第一次发技术贴,如果有不对请指出。
谢谢昨天玩一个塔防游戏,实在玩不过了,就萌生了作弊的想法。
大家从塞班时代过来的都知道,塞班有个神器就是八门神器,便上网搜了下,发现WP 没有类似的软件。
无奈中,便自己摸索了一个下午,终于成功了。
手机党纯手打,希望支持下。
1.首先我们要准备一下几种工具,在智机网都找的到第一个File browser ( 一种支持xap 安装的文件管理器) 第二个缓存清理者(相信大家都不陌生)2. 大家打开filebrowser 文件管理器,打开\applications\data 打开后大家可以看到一大堆文件夹,而且都是名字很长的,这些就是大家安装的程序了。
但是你要找到游戏所在的文件夹,这时就看到第三步了 3.要找到游戏所在文件夹有点费时间,首先打开缓存清理者,看看有没有你要找的游戏如果找到了,直接去看4。
如果没有找到就有点麻烦了,但是也是很简单的,例如。
用文件管理器进第一个文件夹(也就是名字很长的) 进入后可以看到DATA 文件夹。
打开后一般可以看到有以下文件夹Cache ,history ,cookie,Isolatedstore 等等。
如果大家没有看到Cache 这个文件夹的话,就说明这个软件没有缓存,也就是在缓存清理者上看不到。
这时你就可以创建一个文件夹改名为'Cache' 然后打开缓存清理者。
就可以看到这个文件夹是什么软件了!以此类推直到找到你想改的游戏为止4. 这时进行第四步,修改游戏了。
大家找到你想改的游戏的文件夹后,打开此文件夹(也就是名字很长的那个文件夹),然后打开此文件夹下的Data 文件夹。
然后打开Isolatedstore 文件夹,在此文件夹内就可以看到一些xml 或者没有后缀的文件,基本上这些文件只有几个的。
并不是很多然后开始第五步前要告诉大家,xml 文件或者其他的系统是打不开的,要修改的话就要重命名,把后缀改成.txt 没有后缀的加上后缀.txt [[但是大家要记住,改完后要改回原来的名字,改了后缀的就把后缀改回去,加了后缀的就去掉后缀]然后开始第五步 5. 一般大家要修改的数据都是解锁一些武器或者修改金钱。
android apk修改方法(反编译、修改、打包)
1、baksmali:classes.dex反编译为smali格式(smali:smali格式编译打包为classes.dex,但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助)2、dex2jar:classes.dex转为jar包3、jdgui:jar反编译并阅读操作顺序:apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar 处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali 里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。
注意安装时要先删除原来手机里的版本,因为签名不同。
1、apk用zip解开,得到classes.dex2、用baksmali处理为smali(只是反编译看代码就不需要这一步,修改才用) java -jar baksmali-1.4.1.jar -x classes.dex得到out目录,里面是smali文件3、用dex2jar处理classes.dex为jar包dex2jar.bat classes.dex得到classes.dex.dex2jar.jar4、用jdgui打开classes.dex.dex2jar.jar好了,可以看代码,但还不能直接修改,需要对比着来修改smali文件改好后,用java -jar smali-1.2.6.jar -o classes.dex out得到修改后的classes.dex,用这个文件替换fishing_joy_1.apk中的同名文件但这个apk是不能用的,还没有进行重新签名先用keytool生成keystorekeytool -genkey -keystore mykeystore -alias mykeystore -validity 999 把apk中的META-INF删除,再用jarsigner 签名jarsigner -verbose -keystore mykeystore -signedjar fishing_joy_1_signed.apk fishing_joy_1.apk mykeystore先卸载原来手机中安装的这个游戏,再用fishing_joy_1_signed.apk安装最后工作目录是这个样子。
APK应用程序的解包、修改、编辑、汉化、打包及应用
APK应⽤程序的解包、修改、编辑、汉化、打包及应⽤第⼆部分:三星闭源系统apk⽂件的处理,汉化和签名在这⼀部分,我们要进⼊实战。
⾸先,利⽤⼀个具体的例⼦来阐述apk⼯具包的使⽤,对apk⽂件进⾏解包、汉化、打包和签名。
然后,我们来对付三星闭源系统的apk程序,达到我们修改、汉化和美化的⽬的。
我们假定所有apk⽂件都是单个独⽴⽂件,不含odex⽂件(在官版ROM中,通常每个apk都分成两部分,第⼀部分是apk,第⼆部分是odex。
将它们合并是另⼀个题⽬,这⾥不作叙述)。
1. 配置框架(Framework)环境在处理APK⽂件时,apktool需要框架⽂件(framework-res.apk)来解码和打包。
apktool已经包含了标准的框架,所以在⼤多数APK⽂件的解包时,不需要另外提供框架⽂件。
但是,某些制造商(例如三星)使⽤了他们⾃⼰的框架⽂件,为了解包,就不得不从⼿机中或从ROM中把框架⽂件(framework-res.apk)提取出来,然后安装到计算机。
安装命令是:apktool if framework-res.apk安装后就会得到:~\apktool\framework\1.apk注意:三星系统(例如:I897)有两个框架⽂件:framework-res.apk和twframework-res.apk。
在使⽤apktool之前,要安装这两个框架⽂件。
安装⽅法同上:apktool if framework-res.apkapktool if twframework-res.apk安装后就会得到:~\apktool\framework\1.apk和~\apktool\framework\2.apk。
许多⼈拿来apktool⼯具包⽤,说解不开包,运⾏出错。
原因是没有配置框架环境。
2. akp⽂件的汉化和修改我⾸先来讲对⼀般的(⾮三星)apk应⽤程序进⾏解包、汉化和打包。
为你们⽅便和叙述⽬的,我在上传的apktool和apk manager⼯具包⾥都带了⼀个⼩的apk应⽤程序SilentBoot_EN.apk。
破解apk教程
破解apk教程破解APK教程(500字)APK是Android平台上常见的应用程序格式,而破解APK则是指通过修改APK文件的代码或数据,使得原本有限的功能得到解锁或扩展。
破解APK的过程需要一定的编程技术和知识,下面将介绍一个简单的破解APK的教程。
首先,我们需要一个APK文件,可以通过从网上下载一款需要破解的应用程序得到。
然后,我们需要一个反编译工具,比如常用的apktool。
将APK文件拖动到apktool的执行文件上,即可对其进行反编译。
接下来,我们得到的是一个包含源代码和资源文件的文件夹。
我们可以使用任何文本编辑器来修改源代码,但是通常使用Android Studio这样的IDE会更便捷。
打开Android Studio后,点击“Open an Existing Project”并选择反编译得到的文件夹。
稍等片刻,我们就可以在Android Studio中查看到整个项目的结构。
很多APK破解的重点在于修改源代码,如跳过登录验证、解锁高级功能等。
我们需要仔细查找代码中的关键逻辑,常见的位置有MainActivity或者LoginActivity等入口类。
找到我们需要修改的功能代码后,我们可以根据实际需求进行修改。
在修改代码过程中,我们需要注意保留原有的代码逻辑,避免引发其它错误。
此外,可以通过注释掉某些代码来暂时关闭某些功能,以方便我们测试修改的效果。
修改完代码后,记得保存文件。
除了修改代码,我们有时还需要修改资源文件,如图片、布局等。
可以使用图像处理软件来修改需要的图片,然后替换对应的文件即可。
布局文件的修改可以通过简单的XML编辑器来实现。
最后,我们需要重新打包APK并签名,使我们的修改生效。
在Android Studio中,点击菜单栏的“Build”选项,选择“Build Bundle(s)/APK(s)”,然后选择“Build APK”。
稍等片刻,我们将得到一个新的APK文件。
新的APK文件完成了我们的破解操作,但需要注意的是,在实际使用中破解APK可能涉及到违法行为,且可能会损害原应用程序的开发者的合法权益,这是需要谨慎考虑的。
Android ROM美化教程,透明等反编译修改的方法
Android ROM美化教程,透明等反编译修改的方法透明下拉栏1.提取你的systemui.apk,反编2.找到\res\layout\status_bar_tracking.xml文件,搜索“View android:background”,将其等号后面改成"@drawable/status_bar_background"3.回编systemui.apk4.将新apk中的status_bar_tracking.xml文件替换到老apk中这样,你的下拉栏就变成了status_bar_background.png这张图片了,修改一张透明的status_bar_background.png扔进systemui.apk中替换原文件就好了。
在用压缩方式打开替换好的APK、直接把res拖到桌面,打开drawable-hdpi,quickpanel_quick_settings_background.png这个和quickpanel_title_background.9.png这个还有title_bar_portrait.9.png这个要改成透明或半透明都可以不一定名称都一样但是方法都一样,你们进去了就知道 statusbar_background.9.png这个是状态栏直接该透明就OK记得你改的图片大小要一样{重要}透明状态栏2.3.6看其他无视同样是修改systemui.apk。
1.反编后找到smali\com\android\systemui\statusbar\StatusBarService.smali文件2.找到new-instance v0, Landroid/view/WindowManager$LayoutParams;const/4 v1, -0x1const/16 v3, 0x7d0const/16 v4, 0x48const/4 v5, 0x2修改为new-instance v0, Landroid/view/WindowManager$LayoutParams;const/4 v1, -0x1const/16 v3, 0x7d0const/16 v4, 0x48const/4 v5, -0x33.回编4.替换classes.dex5.修改一张statusbar_background.9.png图片,处理成半透明,替换效果图全局背景教程提取完后打开“framework-res.apk\res\values\在用笔记本打开styles.xml文件按“Ctrl+F”打开查找,在“找内容”查上写入<item name="windowBackground">@drawable/screen_background_dark</item>把找到的那句改成下面这句<item name="windowBackground">@drawable/wjj_qjbg</item>继续查找<style name="Widget.ListView" parent="@style/Widget.AbsListView">得到下面这段<style name="Widget.ListView" parent="@style/Widget.AbsListView"><item name="listSelector">@drawable/list_selector_background</item><item name="cacheColorHint">?colorBackgroundCacheHint</item> ----这句<item name="divider">@drawable/divider_horizontal_dark_opaque</item></style>将上面那句<item name="cacheColorHint">?colorBackgroundCacheHint</item>换成<item name="cacheColorHint">@color/transparent</item>第三步:把一张480*800的图片命名为:“wjj_qjbg”记得是PNG格式不然就悲催了放入framework-res.apk\res\drawable-hdpi然后封包接下来就要用压缩方式打开之前没改过的framework-res.apk。
手机游戏BT修改教程
手机游戏BT修改教程(简单操作+带图+详细过程与分析)----小Z前言:本教程属于很简单的教程,只是希望通过此教程能让和我一样的新人们在将来成为大仙行列打下基础。
序:我们首先要认识HALO以及反编译工具。
HALO我相信大家应该都知道,这是我们修改游戏时所必备的工具,好比是我们的一双手,我在此给它私自下个定义,叫:手术刀。
而反编译工具有很多,比如DJ,但本人比较愚笨,看了很久DJ教程都没悟出个所以然,所以我从别人那拿来了一个叫XJAD的工具,虽然相比DJ要来得不好用,但却适合我们新人去慢慢学习JAVA,我给XJAD这个工具一个定义,叫:X光。
那么初步的认识就到此了,下面我们进入更深层次的学习。
教程步骤:首先我们打开HALO,用HALO打开要修改的游戏(本人比较新手,所以只会修改简单的游戏,比如现在的这款魔兽塔防TD正版),如图:我们可以在原文上方看到e.class,f.class和m.class这三个。
那么我们一个一个点来看里面的内容,结果发现我们会在e.class中看到很显眼的东西,也是我们需要修改的东西。
因为我们在运行游戏时,发现钱很少,我们就在此把游戏初始金钱的值记下来。
所以现在我们发现显眼的东西不是别的,正是金、钱等诸如此类的文字,如图:在此我们会知道什么呢。
?答案很简单,就是我们需要修改的东西会在这个金、钱等文字存在的.class比如这个e.class中。
那么我们要怎么才能更加具体的知道初始金钱所在的地点。
?那么我们就先用反编译工具这双眼睛去看下吧。
先将游戏用WINRAR打开,然后解压到一个文件夹中,注:最好是新建的或者空的文件夹。
可能会有新人问怎么用WINRAR。
?其实就是右键选择要修改的游戏,在出现的提示中选择打开方式,里面就会有WINRAR。
解压后就会像这样,如图:然后就运行反编译工具,之前小Z就说过我用的是XJAD,如果有会用DJ的当然也可以。
运行反编译工具打开解压文件中我们认为要修改的东西在**.class类型。
实例解说怎样修改和反编译—ROM定制教程
这篇文章仅在向新手介绍入门方案,如果您已入门,请Google解决您需要的资料。
欢迎大家跟帖讨论,并丰富本文,但请不要用顶,等纯粹无意义的回复。
作者不喜欢。
如果是修改CM的apk很简单,修改原始代码使用命令单独编译该apk 就可。
这篇文章主要讲那该死三星闭源系统是如何在有限的环境下最大化修改你的东西。
本人不是什么高手,只是接触android的时间比较长(从G1就开始用起),爱好收集andorid 历史上比较有代表性的机器,时常爱摆动手机,倒腾ROM,因为个人时间问题,一直没制作完整的作品(我比较懒XD),就连自己使用的ROM还停留在CMbeta3中文化版本。
个人关注aosp比较多点,很高兴我编译的中文版能将CM for i9000 推到大家面前,让更多的I9000用户了解到CM,当然从G1时代开始刷CM的兄弟们自然会知道CM的优秀。
CM发展至今,已经不仅仅是手机ROM,他代表了一种精神,开源和共享(国内论坛有多少?),以及无所不能——这是我欣赏和推崇的。
如果将CM放大到无限的时间和个人团体集合,android 会支持理论上一切可以运行它的设备。
一:基本准备!准备工具:Android SDKjava,下载适合您系统的版本。
您需要的是apktool 或者apk manager 4.9(貌似最新版本了)。
推荐用apk manager 4.9,下面主要介绍该工具使用方法。
以上工具Windows和Linux下都有。
三星I9000 FROYO 系统应用软件在 /system/app 同大多数Android系统一样。
但注意三星有着自定义的framework,在 /system/framework/twframework-res.apk。
如果您要修改三星的system app就需要用到他。
首先我们要提取出系统软件。
有两种方法,第一刷完机,获取root权限之后用以下命令:1. windows和linux下面的命令同样:2. adb pull /system/ <your path:>3. //将手机system目录copy到您电脑的某个路径中复制代码或者解压缩三星官方刷机包:挂载factoryfs到某路径:然后拷贝所有文件。
Android软件代码反编译方法
Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似Sun JavaMe 的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。
所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法来查看,当然这需要借助一些我们自己编写的跟踪程序。
Google最然在Android Market上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取到需要的文件。
dexdump是emulator自带提供的查看dex文件的工具,可使用类似这样的命令将dex文件dump到txt文件中:D:\ProgramFiles\android-sdk-windows-1.6_r1\platforms\android-1.6\tools> dexdump.exe -d classes.dex > spk.dump.txt得到的文件内容,描述了类的信息,但是不怎么好阅读这个方法就强大了,AXMLPrinter2是还原AndroidManifest.xml和main.xml的工具,直接打开这两个xml文件是乱码,而通过还原之后,可以很明白的看到里面的内容(我猜测还是使用了字节异或的方式加的密)。
baksmali.jar是反解析dex的工具,smali.jar则是再还原成dex的工具操作方式如下:1.1、java -jar AXMLPrinter2.jar D:\play\AndroidManifest.xml >AndroidManifest.txt2.2、java -jar AXMLPrinter2.jar D:\play\res\layout\main.xml > main.txt3.3、java -jar baksmali-1.2.5.jar -o classout/d:\play\classes.dex复制代码baksmali可解析(注意,是解析,不是反编译)原java包以及引用的lib包,解析出的文件认真看还是能看懂,比如以下片段:1.2.3.view plaincopy to clipboardprint?4..class Lcom/paul/test/a;5..super Landroid/view/View;6.7.# static fields8..field private static final a:Landroid/graphics/Typeface;9.10.# instance fields11..field private b:I12..field private c:I13..field private d:Z14..field private e:J15..field private f:I16..field private l:[Ljava/lang/String;17.18.# direct methods19..method static constructor <clinit>()V20. .registers 221. sget-object v0,Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;22. const/4 v1, 0x023. invoke-static {v0, v1},Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)La ndroid/graphics/Typeface;24. move-result-object v025. sput-object v0,Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;26. return-void27..end method28.#29.# other methods ..........30.#31.# virtual methods32..method public onKeyUp(ILandroid/view/KeyEvent;)Z33. .registers 434. const/16 v0, 0x4235. if-eq p1, v0, :cond_836. const/16 v0, 0x1737. if-ne p1, v0, :cond_b38. :cond_839. invoke-direct {p0}, Lcom/paul/test/a;->d()V40. :cond_b41. const/4 v0, 0x042. invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V43. invoke-super {p0, p1, p2},Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z44. move-result v045. return v046..end method47..class Lcom/paul/test/a;48..super Landroid/view/View;49.50.# static fields51..field private static final a:Landroid/graphics/Typeface;52.53.# instance fields54..field private b:I55..field private c:I56..field private d:Z57..field private e:J58..field private f:I59..field private l:[Ljava/lang/String;60.61.# direct methods62..method static constructor <clinit>()V63. .registers 264. sget-object v0,Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;65. const/4 v1, 0x066. invoke-static {v0, v1},Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)La ndroid/graphics/Typeface;67. move-result-object v068. sput-object v0,Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;69. return-void70..end method71.#72.# other methods ..........73.#74.# virtual methods75..method public onKeyUp(ILandroid/view/KeyEvent;)Z76. .registers 477. const/16 v0, 0x4278. if-eq p1, v0, :cond_879. const/16 v0, 0x1780. if-ne p1, v0, :cond_b81. :cond_882. invoke-direct {p0}, Lcom/paul/test/a;->d()V83. :cond_b84. const/4 v0, 0x085. invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V86. invoke-super {p0, p1, p2},Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z87. move-result v088. return v089..end method90.复制代码认真一看,就知道:# static fields 定义静态变量的标记# instance fields 定义实例变量的标记# direct methods 定义静态方法的标记# virtual methods 定义非静态方法的标记以onKeyUp方法为例,其中定义了处理逻辑,if-eq p1, v0, :cond_8 表示如果p1和v0相等,则执行cond_8的流程:1.2. :cond_83. invoke-direct {p0}, Lcom/paul/test/a;->d()V4.复制代码调用com.paul.test.a的d()方法不相等:if-ne p1, v0, :cond_b 则执行cond_b的流程:1.2. :cond_b3. const/4 v0, 0x04.5. invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V6.7. invoke-super {p0, p1, p2},Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z 8.9. move-result v010.复制代码大概意思就是调用com.paul.test.a的setPressed方法,然后再调用父类View的onKeyUp方法最后1.return v0复制代码该方法,能把外部引用的lib包类也解析出来,能开到包的全貌。
Androidapk反编译基础(apktoos)图文教程
Androidapk反编译基础(apktoos)图⽂教程很久有写过⼀个⼴⼯图书馆主页⼀个类爬⾍的demo(因为没接⼝,只能扒取静态⽹页),实现⼀些图书馆系统的⼀些功能。
但最近发现图书馆系统在html页⾯上做了⼿脚,⼀页html 页⾯中嵌⼊了⼏千⾏的注释,并有了⾃⼰的App,应该是为了增加扒取的流量成本来防⽌别⼈去扒取⽹页,不过加注释这⼿段就不敢恭维了,内⽹访问速度还⾏,但外⽹访问的话体验很差的。
如下图:⼀堆注释,导致⼀个⽹页要2MB主页上的APP,必然是⽤了图书馆的后台接⼝和服务器交互的,从⽽想试试⽤反编译的⼿段来看看APP使⽤了什么接⼝。
(另外更简单可以通过来给Android⼿机抓包分析其接⼝,再⽤Wireshark来分析tcp包,不过你想要知道全部接⼝的话,可能需要⼀个个接⼝去调⽤,会⽐较⿇烦,采⽤反编译,可能集中在⼀个类中找到这些接⼝)。
解压缩APKTool,并把要反编译的APK放⼊⽬录中反编译:通过CMD进⼊上⾯的⽬录,执⾏命令: apktool decode ZhaoBenShu.apk outdir稍等⽚刻完成反编译,反编译后的⽂件会在outdir⽬录下。
---outdir⽬录结构res :资源⽂件,跟adnroid⼯程⽬录下的res基本⼀样,各种UI图⽚ XML布局⽂件 values xml⽂件(多了⼀个public.xml,有各个资源的id号(R.java中的id))smail:这个是重点⽂件夹,⾥⾯都是smail格式⽂件,是Dalvik虚拟机执⾏的操作码(Dalvik opcodes),这些操作吗有⾃⼰的语法,如果有学过JNI的话,这些语法还是⽐较容易看懂和理解的。
AndroidManifest.xml:Android⼯程下的AndroidManifest.xmlapktool.yml:⽤于重打包。
smail语法:(全部语法请)smail中的数据类型签名跟java中的是⼀样的,如下。
捕鱼达人游戏项目开发过程文档
捕鱼达人游戏项目开发过程文档————————————————————————————————作者:————————————————————————————————日期:捕鱼达人项目开发过程文档一、游戏资源文件image 图片:包括火炮,鱼,子弹,渔网,金币,数字,背景图片以及其它UI 图片 CCFish 类:实现鱼的曲线路线的移动与各种鱼捕捉概率的设置UINumber 类与UIRollNumber 类二、游戏基本结构确定及搭建图1.1 依次在项目中创建如有图类完成项目结构,在总体上把握项目实现内容三、详细设计与各功能模块的实现程序编写流程1. 系统菜单场景:1) 添加初始化方法2) 添加菜单3) 添加菜单选项方法2. 游戏场景1) 添加初始化方法2) 添加纹理图集载入方法3) 添加UI 设计方法4) 添加触摸事件处理方法5) 添加自动补充鱼更新方法6) 添加碰撞检测方法3. 设置页面4. 帮助场景游戏重要模块详细实现1. 纹理图集的使用与加载要点:精灵处于界面中的层次关系,如下为纹理图集加载代码[[CCSpriteFrameCache sharedSpriteFrameCache ] addSpriteFramesWithFile :@"fish.plist"];fishSheet = [CCSpriteBatchNode batchNodeWithFile :@"fish.png"];[self addChild :fishSheet z :100];2. UI 设计的细节实现要点:各个UI 部件(精灵)的层次,位置调整以及武器的更换动作设置,下面为UI 实现代码-(void ) initUI {SysMenu(scene)GameMain(scene) Setting (layer)Help (scene)CGSize winSize = [[CCDirector sharedDirector] winSize];CCSprite * background = [CCSprite spriteWithFile:@"bj00.jpg"];background.position = ccp(winSize.width * 0.5, winSize.height * 0.5);[self addChild:background z:0];//添加能量槽CCSprite *engryBox =[CCSprite spriteWithFile:@"ui_2p_004.png"];engryBox.anchorPoint = ccp(0.5, 0.5);engryBox.position = ccp(winSize.width/2,10);[self addChild:engryBox z:10];//添加能量箭头energyPointer = [CCSprite spriteWithFile:@"ui_2p_005.png"];energyPointer.anchorPoint = ccp(0.5,0.5);energyPointer.position = ccp(winSize.width/2,10);energyPointer.rotation = minEnergyRotation;[self addChild:energyPointer z:12];//添加顶部框体CCSprite *bgExp =[CCSprite spriteWithFile:@"ui_box_01.png"];bgExp.position = ccp(winSize.width/2, winSize.height);bgExp.anchorPoint = ccp(0.5f,1.0f);[self addChild:bgExp z:101];//添加底框CCSprite *bgNum =[CCSprite spriteWithFile:@"ui_box_02.png"];bgNum.position = ccp(bgNum.contentSize.width/2, 0);bgNum.anchorPoint = ccp(0.5f,0);[self addChild:bgNum z:101];//添加武器cannnon = [CCCannon spriteWithSpriteFrameName: [NSStringstringWithFormat:@"actor_cannon1_%i1.png",1]];cannnon.cannonLevel = 1;cannonLevel = 1;cannnon.anchorPoint = ccp(0.5f,0.5f);cannnon.position = ccp(winSize.width/2,30);cannnon.scale = cannon_scale;cannnon.cannonType = nomal;[cannonSheet addChild:cannnon];//添加“+”,“-”按钮(待改)[CCMenuItemFont setFontSize:32];[CCMenuItemFont setFontName:@"Arial"];CCMenuItem * addItem = [CCMenuItemFont itemFromString: @"+"target:self elector:@selector(addCannonLeave)];//addItem.scale = 1.5;CCMenu * addMenu = [CCMenu menuWithItems:addItem,nil];addMenu.position = ccp(winSize.width*0.5+30, 10);[addMenu alignItemsVertically];[self addChild:addMenu z:102 ];CCMenuItem * reduceItem = [CCMenuItemFont itemFromString: @"-"target:selfselector:@selector(reduceCannonLeave)];CCMenu * reduceMenu = [CCMenu menuWithItems:reduceItem,nil];reduceMenu.position = ccp(winSize.width*0.5-30, 10);[reduceMenu alignItemsVertically];[self addChild:reduceMenu z:102];//初始化金币数gold = [[UIRollNumber alloc]init];[gold setNumber:originGold];[gold setPosition:ccp(168, 10)];[self addChild:gold z:102];}-(void)addCannonLeave{CGSize winSize = [[CCDirector sharedDirector] winSize];cannonLevel++;If(cannonLevel == 8)cannonLevel = 1;//remove cannonCCScaleTo * narrow = [CCScaleT o actionWithDuration:0.1f scale:0.1];CCCallFuncO * removeCannon = [CCCallFuncO actionWithTarget:self selector:@selector(removeCannon:) object:cannnon];CCSequence *bowDismissSequence = [CCSequence actions:narrow,removeCannon,nil];[cannnon runAction:bowDismissSequence];//add a new cannoncannnon = [CCCannon spriteWithSpriteFrameName:[NSStringstringWithFormat:@"actor_cannon1_%i1.png",cannonLevel]];cannnon.cannonLevel = cannonLevel;cannnon.position = ccp(winSize.width*0.5,30);cannnon.scale = 0.1f;CCDelayTime * delayTime = [CCDelayTime actionWithDuration:0.1f];CCScaleTo * appear = [CCScaleT o actionWithDuration:0.1f scale:cannon_scale];CCSequence * bowAppearSequence = [CCSequence actions:delayTime,appear,nil];[cannnon runAction:bowAppearSequence];[cannonSheet addChild:cannnon z:100];}//删除武器用于武器改变-(void)removeCannon:(id)sender{//CCLOG(@"removeBow");CCCannon * sp = sender;[cannonSheet removeChild:sp cleanup:YES];}3.触摸事件模块要点:子弹、大炮的跟随转向,子弹射出速度设置,越界判定(移动出画面)-(void) setAngle:(CGPoint)point sprite:(CCSprite *)sp{//CCLOG(@"setAngle");//设置“旋转角度”int offX = point.x - cannnon.position.x;int offY = point.y - cannnon.position.y;if (offY <= 0) {return;}float ratio = (float)offY /(float)offX; //直角三角形float angle = atanf(ratio)/M_PI*180; //三角形正切值获得角度if (angle < 0) {cannnon.rotation = -(90+angle);//设置武器旋转角度sp.rotation = cannnon.rotation;} else if (angle > 0) {cannnon.rotation = 90 - angle;sp.rotation = cannnon.rotation;}}#pragma touch menthed- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{for (UITouch *touch in touches){CGPoint pos = [touch locationInView:touch.view];pos = [[CCDirector sharedDirector] convertToGL:pos];if (pos.y <= cannnon.position.y) {return;}if (cannnon.cannonType == laser) { //如果当前为超级武器,} else {[cannnon setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:[NSStringstringWithFormat:@"actor_cannon1_%i2.png",cannnon.cannonLevel]]];}[self setAngle:pos sprite:nil];}}- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{for (UITouch *touch in touches) {CGPoint pos = [touch locationInView:touch.view];pos = [[CCDirector sharedDirector] convertToGL:pos];[self setAngle:pos sprite:nil];}}- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{for (UITouch *touch in touches){CGSize winSize = [[CCDirector sharedDirector] winSize];CGPoint pos = [touch locationInView:touch.view];pos = [[CCDirector sharedDirector] convertToGL:pos];int offX = pos.x - cannnon.position.x;int offY = pos.y - cannnon.position.y;if (offY <= 0) {return;}if(cannnon.cannonType == laser){//用超级能量捕捉动物(待改)cannnon.cannonType = nomal; //发射完毕还原武器}else{//***************(待改)*******************[gold setNumber:([gold getNumber]-cannnon.cannonType)];//每次损耗CCBullet *bullet = [CCBullet spriteWithSpriteFrameName:[NSStringstringWithFormat:@"bullet0%i.png",cannnon.cannonLevel]]; //添加子弹bullet.position = cannnon.position;bullet.isHit = NO;[self setAngle:pos sprite:bullet];// Determine where we wish to shoot the projectile toint realY = winSize.height + bullet.contentSize.height*0.5;float ratio = (float) offX / (float) offY;int realX = (realY - cannnon.position.y)* ratio + cannnon.position.x;CGPoint realDest = ccp(realX, realY);// 子弹会于一个恒定的速率按照射击方向前进int offRealX = realX - cannnon.position.x;int offRealY = realY - cannnon.position.y;float length = sqrtf((offRealX*offRealX)+(offRealY*offRealY));//一旦我们有了距离,我们只是除以速度,以获得所需的时间。
反编译一款APP然后重新打包(Windows环境)
反编译⼀款APP然后重新打包(Windows环境)最近有⼩伙伴私信我,怎么把⼀款APP改成⾃⼰的信息呀,咳咳,这⼜来送题材了,今天⽔⼀把APP反编译+回编译,⽂中会针对⼀款APP进⾏简单的修改信息,问问题的⼩伙伴还不⽕速右上⾓⽀持⼀下。
MacOS跟Windows我是分开写的,怕你说平台不⼀致就打退堂⿎了。
⼀、下载jadx下载后进⼊该⽂件根⽬录执⾏./gradlew.bat dist⽂件通过如上指令,可以帮我们打包出build⽬录,接下来就全靠这个build⽬录⼲ ”⼤事“ 了,我们来看看这个⽬录下的⽂件:⼆、安装apktool接下来安装今天的第⼆个⼯具——apktool1、下载apktool⽂件打开⽹址后找到windows节点,对着wrapper script右键:弹窗保存时⼀定要使⽤bat格式,默认就是bat格式。
2、下载apktool.jar点击windows节点上的 ()进⼊该界⾯后,查看右侧jar下载列表,当然下载最新⽂件:3、配置apktool执⾏权限⾄此,我们下载了两个⽂件,我们把这两个⽂件放到C://Windows⽬录下,这个过程等价于在系统环境变量Path中配置。
4、测试apktool权限随便找个命令⾏执⾏如下指令:apktool,只要打印内容说明没问题三、开始反编译APP我们找个简单点的APP,有⼈提议⽤我的涂涂影院,出门右拐,请私下⾃⼰尝试,我怎么会公开处刑⾃家孩⼦。
1、反编译反编译⽤到的是第⼆个下载的⼯具—apktool,我们先下载上⽅链接中的app,然后在该⽂件⽬录的控制台下执⾏如下指令:apktool d 名称.apk apktool d ⼀个TV.apkd,代表反编译,b代表回编译,不要记混。
执⾏后我们得到了⼀个⽂件夹《⼀个TV》,我们简单看⼀下这个⽬录:如图,其中,res⽂件夹下存放的是反编译出来的所有资源,smali⽂件夹下存放的是反编译出来的所有代码,AndroidManifest.xml则是经过反编译还原后的manifest⽂件。