一步步教你粗暴破解宫爆老奶奶-APK反编译教程

apk反编译修改教程系列---简单去除apk开屏广告【五】 当然 如果只是单纯的想去除开屏广告。有很多软件可以直接使用。例如 李跳跳 .一指禅.轻启动等或者模块类的都可以解决。 阅读详情
相信很多人对反编译有过兴趣,但是可能有部分人仅仅停留在通过反编译获取到apk里面的一些图片资源如style、layout等xml文件以作参考借鉴之用,可能也会有人用dex2jar+jd-gui的方式来看其java代码(如下图),但是大家都知道,这样的代码是不能回编译回去重新生成apk的,甚至代码也很容易被混淆,让你看得一头雾水


今天,我在这里就跟大家谈谈,希望通过这个博客,让大家知道,其实反编译是可以把apk反编译出来,然后修改里面的内容,然后再回编译,然后再签名,最后的结果是一个修改过的apk(当然是手机上能装的!)

大家都听过 Dalvik吧?帮大家百度了一下:
Dalvik是google专门为Android操作系统设计的一个虚拟机,经过专门针对移动平台深度优化过。Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex。
当一个apk被反编译后,将会得到一个装满.smali文件的文件夹,而我们这次操作正是这些smail文件。

我们以目前 比较火的《宫爆老奶奶》为例子,讲述一下如何简单粗暴反编译一款游戏:
第一步:
首先,下载 《宫爆老奶奶》 的apk(以下简称apk),我这个是从豌豆荚下的,腾讯计费的版本,这里就省略传送了。

第二步:
下载反编译用的工具——apktool(传送门:http://download.youkuaiyun.com/detail/qq359948834/5116151),下载完后,随便解压放好。

第三步:
开始反编译。先将apk放到./ApkTool/文件夹里(./代表当前文件夹,这个路径随意,下同),然后打开./ApkTool/APKTool.cmd,按照窗口提示,要先重命名apk为123.apk,重命名完毕后,按‘1:反编译’然后回车,会看到反编译成功,得到./ApkTool/APK 文件夹。

第四步:
大家可以先随便浏览下文件夹里面的内容,会看到如图所示的文件:



很明显,这是混淆过的代码,但是不要紧,混淆只不过是一种浅层次的防反编译动作,只是对一些类进行了重命名而已,对应用的逻辑函数变量的用法还是一样的。
好,初步了解后,我们先不要改动任何文件,尝试再次打开./ApkTool/ApkTool.cmd,然后选择‘3:回编译并签名’看看能不能打回原版包。
如无意外,都会出现下面这种错误:

熟悉android开发的同学可能会知道是什么原因了,我菜鸟猜了一下,应该是当前apktool.jar所使用的android平台版本比较低,所以识别不了“layout-h500dp-large”和“layout-h500dp-normal”资源文件的命名,所以我们可以修改成“layout-large”和”layout-normal“,这样,我没记错的话,android2.2系统以上的都适用了。修改后,重新选择‘3’试试看,如果步骤没错,会出现以下结果:


*以上关于警告的信息我们可以先放放不予理会。
如果大家都是出现这种情况,说明反编译成功了,接下来,大家可以随意修改图片资源以及布局文件了,只要不影响命名,以及资源数量不变,就不会影响回编译,现在,我们进入重点部分——开始修改smail文件,以实现屏蔽扣费

第五步:
先锁定计费代码。怎么锁定计费代码呢?大家可以想一下计费sdk的架构和流程:
a.用户点击UI上的物品item
b.游戏底层通过jni方式回调java层请求计费
c.弹框提示购买内容及价格
d.监听用户点击动作,发送短信(或者支付宝等支付方式)或用户取消购买,jni回调游戏底层告知购买结果(一般只有两种结果,成功与否)

所以,以上流程大家有几种方法锁定:
1、使用UltrafileSearch(一款很出名的搜索工具)批量搜索支付常用关键字(pay、purchase、success、fail、notify等等)
2、从非内部类(文件名没有$)入手,扫读所有方法名,碰到敏感方法,可以尝试添加smail代码输出log信息已判定该方法在什么时候执行
3、从与支付有关的资源入手,看看程序哪里调用了支付用到的图片和文字资源(老奶奶的资源都是写在asset,然后把所有调用支付界面的代码打成so,所以我们反编译后看不到,这个方法不适用于老奶奶这款游戏)

经过一轮苦苦摸索,终于锁定了ITencent.smali这个文件,里面有MakePay(I)V,PrePay(I)V,SendSMSCB(ILjava/lang/String;)Z 这几个很明显的方法,大家可以在这几个方法里面添加log语句(具体怎么添加,如图所示,如果还有疑问,请先阅读smail的相关语法),然后看看logcat的输出情况:

贴上代码:
?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
.method public static MakePay(I)V
    .locals 3
    .parameter "id"
 
    .prologue
         #==========
    .line 8888
    const -string v0, "kelly"
    const -string v1, "========MakePay"
    invoke- static {v0,v1},Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    #==========


*其他方法类似,这里不作赘述(注意!这里的.locals 3指的是当前方法使用了3个寄存器,因为我们的log语句一般都用到了两个寄存器,所以,当使用log时,请先留意下该方法的.locals 值是不是>=2)



修改完毕后, 直接打开反编译工具选择‘3’回编译后,再安装到手机跑跑看看logcat显示(当然,也可以直接使用‘9:一键回编译并安装’,前提是你的adb环境要搭好),如图所示:
游戏界面:

logcat如图:


*android开发者都知道,log有两个参数,一个tag一个是String型的content,大家可以发挥一下小宇宙,输出所有String型的内容看看
看到这log,我们成功一半了,说明计费代码锁定了
第六步:
修改计费逻辑。这一部分涉及不少smail语法,如果大家觉得迷茫,可以先暂停下来,看看有关smail语法的介绍。
大家看看MakePay方法里面,有一行代码:
invoke-static {p0, v0}, Lcom/tencent/webnet/WebNetInterface;->SMSBillingPoint(ILjava/lang/String;)V
略懂英语的应该也能猜到什么意思:“短信,购买,点 ”,连起来差不多意思就是生成计费短信,并提示用户付费,我们进入该方法所在的路径看个究竟(com/tencent/webnet/WebNetInterface)
如图,大家也可以在这方法加上log:

?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
.method public static SMSBillingPoint(ILjava/lang/String;)V
    .locals 7
    .parameter
    .parameter
 
    .prologue
         #==========
    .line 8888
    const -string v0, "kelly"
    const -string v1, "========SMSBillingPoint"
    invoke- static {v0,v1},Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    #==========


看到这里,大家开始头晕了吧?hold住,距离成功就差一点点了!
大家看看这个方法里面,有一句代码:

?
代码片段,双击复制
01
invoke- static {v0, v5, v1}, Lcn/emagsoftware/gamebilling/api/GameInterface;->doBillingBySms(Ljava/lang/String;ZLcn/emagsoftware/gamebilling/api/GameInterface$BillingCallback;)V


意思也很易读懂:doBillingBySms=“做,购买,通过,短信”,而且,大家再看,这个方法参数之中有一个字符串,一个int整形,以及一个回调方法BillingCallback,所以,我可以肯定,这是一个调用发短信被回调发送结果的方法!但是,大家也看到,这句代码藏在这个SMSBillingPoint方法里面的底部,也就是说,你要调用它,必须经过重重逻辑判断。
那么,现在你有两种选择:1、读懂所有逻辑,修改每个逻辑的条件,以达到doBillingBySms语句所在行; 2、直接把doBillingBySms语句提前到所有逻辑之前
很明显,我会选择第二种
但是,在选择第二种方法,也意味着,你要提供doBillingBySms的三个参数。
细心一看,你会发现,这三个参数中的第二个,也就是说v5,在方法一开始就定义了,所以参数已解决一个;
v0是什么?大家请看:

?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
invoke- static {v1, v2}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
 
    move-result-object v0
 
    .line 221
    new -instance v1, Ljava/lang/StringBuilder;
 
    const -string v2, "IDO send sms code = "
 
    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
 
    invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


里面与v0有关的都是些字符串操作,比如StringBuilder,所以,我猜v0是一个让运营商识别所购买道具的识别码,而v1,是一个回调函数的实例,它的实例化代码为,大家去这个路径写一下log输出,对后面的步骤有用(步骤和注意点跟上面提到的如何写log一致):

?
代码片段,双击复制
01
02
03
new -instance v1, Lcom/tencent/webnet/q;
 
    invoke-direct {v1}, Lcom/tencent/webnet/q;-><init>()V


好!现在,三个参数都拿到手了,我整理一下,用以下内容,直接覆盖这个SMSBillingPoint方法:(其实我个人不太推荐删减源文件的所有代码,毕竟以后可能会有用,所以建议只把我们的代码插入到方法里的头部,然后在我们的代码的尾部加一个return-void即可)

?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.method public static SMSBillingPoint(ILjava/lang/String;)V
    .locals 7
    .parameter
    .parameter
 
    .prologue
         #==========
    .line 8888
    const -string v0, "kelly"
    const -string v1, "========SMSBillingPoint"
    invoke- static {v0,v1},Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    #==========
    const / 16 v6, 0x3ed
 
    const / 4 v5, 0x1
 
    const / 4 v4, 0x0
 
    const / 4 v0, 0x0
 
         sget-object v1, Lcom/tencent/webnet/b;->ah:Lcom/tencent/webnet/WebNetInterface;
 
    iput-object p1, v1, Lcom/tencent/webnet/WebNetInterface;->m_SMSCurMark:Ljava/lang/String;
 
    .line 220
    const -string v1, "%03d"
 
    new -array v2, v5, [Ljava/lang/Object;
 
    add- int /lit8 v3, p0, - 0x1
 
    invoke- static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
 
    move-result-object v3
 
    aput-object v3, v2, v0
 
    invoke- static {v1, v2}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
 
    move-result-object v0
          new -instance v1, Lcom/tencent/webnet/q;
 
    invoke-direct {v1}, Lcom/tencent/webnet/q;-><init>()V
 
    invoke- static {v0, v5, v1}, Lcn/emagsoftware/gamebilling/api/GameInterface;->doBillingBySms(Ljava/lang/String;ZLcn/emagsoftware/gamebilling/api/GameInterface$BillingCallback;)V
         return - void
.end method


替换好之后,我们回编译一下,看看有没有报错(报错的同学,麻烦仔细检查一下上面提到的.local有没有注意,而且也要很仔细地检查代码有没有写错),然后打开logcat,在游戏里面点击购买,看看输出情况:



很好,这下说明我们的apk即使已经动过计费逻辑,也能跑起来了
下面,是最后一步,也是最简单的一步,就是把回调失败改成回调成功,怎么改呢?大家看看com/tencent/webnet/q的内容:

?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
.method public onBillingFail()V
    .locals 3
 
    .prologue
    .line 233
    sget-object v0, Lcom/tencent/webnet/b;->am:Lcom/tencent/webnet/o;
 
    const / 16 v1, 0x3e9
 
    sget-object v2, Lcom/tencent/webnet/b;->ah:Lcom/tencent/webnet/WebNetInterface;
 
    invoke- static {v2}, Lcom/tencent/webnet/WebNetInterface;->a(Lcom/tencent/webnet/WebNetInterface;)Ljava/lang/String;
 
    move-result-object v2
 
    invoke-virtual {v0, v1, v2}, Lcom/tencent/webnet/o;->a(ILjava/lang/String;)V
 
    .line 234
    return - void
.end method
 
.method public onBillingSuccess()V
    .locals 3
 
    .prologue
    .line 227
    sget-object v0, Lcom/tencent/webnet/b;->am:Lcom/tencent/webnet/o;
 
    const / 16 v1, 0x3e8
 
    sget-object v2, Lcom/tencent/webnet/b;->ah:Lcom/tencent/webnet/WebNetInterface;
 
    invoke- static {v2}, Lcom/tencent/webnet/WebNetInterface;->a(Lcom/tencent/webnet/WebNetInterface;)Ljava/lang/String;
 
    move-result-object v2
 
    invoke-virtual {v0, v1, v2}, Lcom/tencent/webnet/o;->a(ILjava/lang/String;)V
 
    .line 228
    return - void
.end method


怎么改?不用教吧?直接把onBillingSuccess的内容复制粘贴,替换onBillingFail方法原有的内容(其实细心的同学可以发现,两个方法的区别就在于那个字符串“ const/16 v1, 0x3e9”和“ const/16 v1, 0x3e8”而已)
大功告成,现在打开反编译工具,回编译后安装到手机,试试看吧(注意!为保险起见,建议各位断网+飞行模式,你懂的)


写在最后:
作为一个开发者,我们要尊重每一个应用,无论游戏好玩不好玩好不好用,它都代表着一个开发者全部的心血,赞之合理,踩之有度。
至于软件扣费这个情况,无可否认,对于已经习惯免费的国人来说,一开始可能不习惯,但是,试想下,一款优秀软件,只需要20块钱左右,就已经可以买到很不错的道具了,而且有更加好的游戏体验及乐趣,再加上,这些钱能帮助到开发者开发出更多更好玩的游戏更精彩的应用,这是一个良性循环,希望玩家、开发者、用户能一起构建这种氛围。


基于Java+Maven+Testng+RestAssured+Allure+Jenkins搭建一个接口自动化框架 2、有一个提取表达式列,通过编写每个接口的JSON提取表达式,后边在解析Excel时,对接口执行后的响应数据用该表达式提取出来,保存到环境变量,如果某些接口需要前置接口的响应数据,我们就可以从环境变量中获取该数据出来,从而解决了接口关联的问题。1、在之前介绍过全局配置类Contants中添加一个控制台日志开关控制权限,如果选择为false,则控制台不输出日志,将日志输出到allure报表,选择为true,则在控制台输出日志,不输出到allure报表。 阅读详情

相关推荐

【网络】PFC背景和原理 、文档(DCB=PFC + ETS,DCBX=DCB扩展)

目录 零、背景 一、PFC 1.概述 2.报文格式 3.工作机制 二、ETS 产生原因 基本原理 优先级组的调度 优先级的调度 三、DCBX 产生原因 基本原理 DCBX TLV介绍 五、PFC 拥塞研究(文档收集) 六、DC-QCN算法 (网络工程师必会) 7.1 α更新 7.2 降速 7.3 提速 8.总结 ...

小鱼菜鸟的博客 2165

Android逆向笔记-4种方式破解下例中的smali代码

原始的代码如下: 这里可以直接看到,用户名是hfdcxy,密码是1234。 如何破解,提供4个思路: 改法一:

IT1995的博客 3659

Jupyter Notebook 命名出现“error”且运行后没反应

Jupyter Notebook 命名出现“error”且运行后没反应提前声明错误截图(方便大家看看是不是自己的错误)解决方法 提前声明 我的问题是在看到答主 @开始King的回答后才解决的,因为答主大大的文章后面有些地方不是很详细,我在这里再在King大大的基础上完善一下子 错误截图(方便大家看看是不是自己的错误) 1.命名失败,上面出现一个“error”字样 2.运行失败,无论是点击上方的运行按钮还是按快捷键shift+enter 都只会向下再增加一个代码块,而不会运行程序。 (也不是很多人出现的[*

qq_52770743的博客 1万+

cocos creator做闯关类《宫爆老奶奶》(1)

突然想起来以前初中很火的游戏《宫爆老奶奶》,以前玩的很开心的。 ui素材直接下载老版的《宫爆老奶奶》,腾讯好像发行了《宫爆老奶奶2》,不过没法玩。 先做个loadingScene吧 直接用cocos creator新建场景,然后将动画编辑好,在loading动画的最后一帧添加一个帧事件 cocos creator的动画编辑器还行吧,蛮方便的,比在cocos 2dx中方便好多 要在loadings...

很阔爱的博客 871

STM32 USB2.0 转 Type-C 接口设计与实现

本文详细介绍了STM32 USB2.0转Type-C接口的设计与实现方案,涵盖硬件电路设计、软件配置及调试技巧。重点解析Type-C接口的CC引脚配置和电源管理,提供设备模式、主机模式及双角色模式的实现方法,帮助开发者解决实际应用中的连接稳定性和ESD防护等问题,提升产品可靠性和兼容性。

blockchain9miner的博客 1020

从毫米波到计算机视觉:智能座舱监控系统的多模态技术融合

本文探讨了智能座舱监控系统中多模态技术融合的创新应用,涵盖毫米波雷达、红外传感与计算机视觉的协同架构。通过传感器时空对齐、低光照算法突破及隐私保护设计,系统在DMS、OMS等场景实现99.7%的检测准确率,同时优化成本至$45以内,为汽车智能化提供关键技术支撑。

d6e7f8的博客 902

解决某APP游戏内购

对某APP内的道具购买进行破解 学习笔记三:对一款存在道具、关卡内购的APP进行破解使其道具、关卡购买免费化 一、将该未进行处理的APP通过模拟器安装使用 通过安装后的使用(购买其中的道具)发现该APP总体上通过手机发送短信的付费的方式进行支付操作。第二张图又说明在支付逻辑中存在验证码的验证。 二、利用Android KILLer 对其进行反编译 1、首先解决验证码的验证失败。 首先猜想是否存在...

qq_42892021的博客 5219

基于FPGA的UDP 通信(六)

本文基于FPGA和MATLAB对千兆以太网通信模块UDP数据发送(FPGA发送)进行联合调试。

记录所学,分享知识,结识挚友 4730

逆向破解必备基础smail基础语法

// 此代码由autojs交流群整理提供 一键加群 Smali基本语法 .field private isFlag:z  定义变量 .method  方法 .parameter  方法参数 .prologue  方法开始 .line 12  此方法位于第12行 invoke-super  调用父函数 const/high16 v0, 0x7fo3  把0x7fo3赋值给v0 invoke-direct  调用函数 return-void  函数返回void .end method  函数结束 new-.

九黎AJ的博客 2655

【大模型】DeepSeek + Coze 打造个人专属AI智能体使用详解

DeepSeek + Coze 打造个人专属AI智能体使用详解

congge 1万+

java毕设:基于springboot的服装搭配推荐系统(springboot+layui+jq+html)1011

项目描述 基于springboot的服装搭配推荐系统: 基于天气服装搭配推荐系统为用户提供未来一周的天气预报情况,并根据预报天气和用户现有的服装进行着装搭配,以及显示未来6小时精确温度数据为用户提供更精确的天气信息便于用户在出行前对自己的着装进行调整,每日用户可以根据自己当日对系统推荐的着装搭配舒适度进行反馈,系统将根据用户的反馈对用户着装的保暖系数进行相应调整,通过多次的反馈和调整形成对用户着装的个体化和精确化的推荐。 本系统可以为用户提供以下服务: 1.未来五天的天气信息显示; 2.未来六小时内天气温度

qq_2537071370的博客 3646

cocos creator做闯关类《宫爆老奶奶》(2)

loadingScene已经做好了,现在开始做游戏开始界面也就是菜单界面

很阔爱的博客 771

8、多导睡眠图记录中基于级联自适应滤波器的脑电图信号噪声去除

本文提出了一种基于三级级联自适应滤波器的新型方法,用于去除多导睡眠图(PSG)记录中脑电图(EEG)信号的常见伪迹,包括50/60 Hz电源线干扰、心电图(ECG)和眼电图(EOG)伪迹。该方法采用最小均方(LMS)算法,通过分阶段滤波有效分离并衰减各类噪声,在保留EEG关键神经节律信息的同时显著提升信号质量。研究利用MIT-BIH数据库中的18份真实PSG记录进行验证,结果表明该方法具有无相位失真、实现简单、自适应能力强等优势,适用于睡眠研究及脑机接口等生物医学应用领域。

banana的博客 174

017 Android加固之APK混淆和保护方式

文章目录APK加固介绍使用proguard对apk中的源码进行混淆proguard原理对APK反编译之后的smali进行混淆代码乱序原理乱序实例-Hello对APK中的字符串进行加密解决方案1-StringBuilder拼接解决方案2-编码混淆解决方案3-加密处理小结对APK中的文件进行校验对APK中的Dex文件进行校验对APK中的APK进行校验对APK中的签名进行校验小结 APK加固介绍 Android应用程序使用的开发语言是JAVA,由于采用的是这种解释型语言,所以代码可以被反编译。如果没有经过混淆或是

鬼手的博客 3115

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

你所不知道的"宫爆老奶奶"

Testin现在免费提供App真机自动化云测试服务,通过开发者认证还可以使用更多功能。欢迎移动应用和手机游戏开发者体验!

u010619251的专栏 596

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 混淆 去掉log,Android去掉/混淆Log,反编译都看不到

原标题:Android去掉/混淆Log,反编译都看不到出发点:当然是由于编程习惯太好,打了一堆中文log,其实只是想给测试看。然而如果包被反编译,看log基本都能理解流程了,有点尴尬。所以此文主要探究proguard配置,以去除log。以下过程示例,来自于这段代码。publicclassMainActivityextendsAppCompatActivity{privatestaticfinalS...

weixin_42469169的博客 910

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

安卓逆向手册

逆向手册 if eq == ne != gt > ge >= lt< le<= iget iput iget 取值 iput 赋值 const 被赋值,赋值 const v0,0x3 将0x3赋值v0寄存器 const/4 赋值,1true,0false 0x 16进制表示小数 return return-void 直接返回 return v0 返回v0 ...

weixin_46601305的博客 444

(android实战)破解apk

简单的总结几个关键步骤:   一、工具准备:apktool , dex2jar , jd-gui二、使用dex2jar + jd-gui 得到apk的java源码 1.用解压工具从 apk包中取出 classes.dex 文件 用命令(dex2jar.bat classes.dex )得到一个 jar文件2.用jd-gui反编译工具将得到.jar文件反编译成.java文件 三、使用apktoo...

weixin_34293911的博客 1468

crackme.apk分析实例

样本2crackme与注册码破解 apk运行 apk运行效果:随意输入不能注册 目标:破解注册码 分析apk GDA打开 从onclick到access2最后到checkSN函数,发现最后的注册码逻辑 该关键函数代码如下,解读代码逻辑就是: 读取username,将其转换成md5,然后将md5字符串间隔(2个2个)生成一个子串。子串则是username对应的sn。对比用户输入的sn和由用户名生成的规则的sn,如果一致,那么就能成功注册。 private boolean MainActivity.checkS

freedomDA的博客 1021

【移动安全实战篇】————1、Android手机下xx.apk JAVA破解之旅

前言 这几天手机上装了个软件,用了没多久就收费了,颇为不爽,于是便想看看能否破解,便有了下文,请注意该文章只为技术交流,请不要进行非法破解。 软件描述 这个apk使用一定次数后就会扣掉积分 当积分少于0的时候 便不能使用,每次启动程序的时候便会提示积分为0,需要注册,这说明程序在启动的时候就已经检测了积分,刚好可以利用这点 练手软件 http://pan.baidu.com/share/...

Fly_鹏程万里 3108

Android APK反编译就这么简单 详解(附图)

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

2401_84121627的博客 8632

Android APK反编译就这么简单 详解(附图)

在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看。下面是我参考了一些文章后简单的教程详解。 (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平。) 测...

xumingrencai 3万+

反编译 APK 的基本步骤

文章目录反编译 APK 的基本步骤1.编写一个简单的安卓 app2.将 release-app.apk 解压缩3.将 classes.dex 文件反编译为 jar 文件4.使用 jd-gui 可视化阅读 classes-dex2jar.jar 文件内容5.使用 apktool 反汇编 release-app.apk6.回编 apk7.重新签名 apk 和对齐8.重新安装 apk 到你的设备 反编译 APK 的基本步骤 本文简要说明一个 apk(未加固) 的反编译步骤以及所使用到的工具,下列工具在网上均可

CodeFlight 8848

Android反编译工具的使用(保姆级教程)

介绍了apktool,dex2jar,JD-GUI软件的安装,以及如何使用这些文件,并通过举例来教会大家如何使用这些工具

qq_52380836的博客 5560

Android apk反编译教程

assets:静态资源文件主要存放一些附件,例如,一些音频文件,其它的用户业务需求定义的配置文件等,可以以文件的方式被读取或访问。META-INF:签名文件所在的目录。Android apk文件只有在正式签名后,才可以发布到应用市场。res:即资源文件。程序写在开发时用到的字体,图片,布局文件等,都在这个目录中。AndroidManifest.xml:就是项目的配置文件。

weixin_40323532的博客 3394
上一篇: Android开发教程汇总
下一篇: 如何使用github
King·Forward
博客等级 码龄14年 117粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值