吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1780|回复: 5

[安卓逆向图文] 【原创】安卓逆向实例 - ProCCD复古CCD相机胶片滤镜

[复制链接]
泄密无花 发表于 2023-1-12 15:56 | 显示全部楼层 |阅读模式

0x00 前言

最近老是下雨,突发奇想:想和喜欢的人去拍照,感受下雨天的浪漫

然后就找到这个App:ProCCD复古CCD相机胶片滤镜

第一次尝试着去逆向Pro会员,一波三折,还好赶在周末之前完成了

0x01 准备工作

1、下载最新版本的ProCCD复古CCD相机胶片滤镜

应用宝App介绍主页:

https://sj.qq.com/appdetail/com.cerdillac.proccd.cn

应用宝直链下载:

https://8ffcfc786802a12cddaea5ca998645ad.dlied1.cdntips.net/dd.myapp.com/sjy.00004/16891/apk/428A0EF4CDB2A17595F0F2AA085BF1B6.apk?mkey=63bf5b17db80b624&f=0000&fsname=com.cerdillac.proccd.cn_2.4.6_64.apk&cip=219.128.144.209&proto=https

Screenshot_20230112-150913.png

2、用到的工具

去签:MT管理器、NP管理器

逆向:jadx、Android Killer

0x02 静态分析

“常用”的 isVIP

注意:软件有签名校验,自行使用 MT 或 NP ,去签之后再进行分析

1、先把 apk 拖进 jadx 中进行一下静态分析,然后搜索 isVIP 关键字,关注到有个 VipState

image.png

2、跟进 VipState ,看到这里大概就是这连绵阴雨天气中的第一缕阳光

image.png

3、返回 Android Killer 修改代码、保存、编译、安装

以下为原始代码,未作修改,然后继续往下看

.class public Lcom/lightcone/wxpay/billing/bean/VipState;
.super Ljava/lang/Object;
.source "VipState.java"


# instance fields
.field public expiredTime:J

.field public isVip:Z


# direct methods
.method public constructor <init>()V
    .locals 2

    .line 1
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    const-wide/16 v0, -0x1

    .line 2
    iput-wide v0, p0, Lcom/lightcone/wxpay/billing/bean/VipState;->expiredTime:J

    return-void
.end method


# virtual methods
.method public formatVipExpiresTime()Ljava/lang/String;
    .locals 5
    .annotation runtime Lcom/fasterxml/jackson/annotation/JsonIgnore;
    .end annotation

    .line 1
    iget-boolean v0, p0, Lcom/lightcone/wxpay/billing/bean/VipState;->isVip:Z

    if-eqz v0, :cond_1

    iget-wide v0, p0, Lcom/lightcone/wxpay/billing/bean/VipState;->expiredTime:J

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-gtz v4, :cond_0

    goto :goto_0

    .line 2
    :cond_0
    new-instance v0, Ljava/text/SimpleDateFormat;

    const-string v1, "yyyy/MM/dd"

    invoke-direct {v0, v1}, Ljava/text/SimpleDateFormat;-><init>(Ljava/lang/String;)V

    .line 3
    new-instance v1, Ljava/util/Date;

    iget-wide v2, p0, Lcom/lightcone/wxpay/billing/bean/VipState;->expiredTime:J

    invoke-direct {v1, v2, v3}, Ljava/util/Date;-><init>(J)V

    invoke-virtual {v0, v1}, Ljava/text/SimpleDateFormat;->format(Ljava/util/Date;)Ljava/lang/String;

    move-result-object v0

    return-object v0

    :cond_1
    :goto_0
    const-string v0, ""

    return-object v0
.end method

.method public isPermanentVip()Z
    .locals 5
    .annotation runtime Lcom/fasterxml/jackson/annotation/JsonIgnore;
    .end annotation

    .line 1
    iget-wide v0, p0, Lcom/lightcone/wxpay/billing/bean/VipState;->expiredTime:J

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-nez v4, :cond_0

    iget-boolean v0, p0, Lcom/lightcone/wxpay/billing/bean/VipState;->isVip:Z

    if-eqz v0, :cond_0

    const/4 v0, 0x1

    goto :goto_0

    :cond_0
    const/4 v0, 0x0

    :goto_0
    return v0
.end method

.method public isVipEffective()Z
    .locals 1
    .annotation runtime Lcom/fasterxml/jackson/annotation/JsonIgnore;
    .end annotation

    .line 1
    iget-boolean v0, p0, Lcom/lightcone/wxpay/billing/bean/VipState;->isVip:Z

    if-eqz v0, :cond_0

    invoke-virtual {p0}, Lcom/lightcone/wxpay/billing/bean/VipState;->isVipExpires()Z

    move-result v0

    if-nez v0, :cond_0

    const/4 v0, 0x1

    goto :goto_0

    :cond_0
    const/4 v0, 0x0

    :goto_0
    return v0
.end method

.method public isVipExpires()Z
    .locals 5
    .annotation runtime Lcom/fasterxml/jackson/annotation/JsonIgnore;
    .end annotation

    .line 1
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

    iget-wide v2, p0, Lcom/lightcone/wxpay/billing/bean/VipState;->expiredTime:J

    cmp-long v4, v0, v2

    if-lez v4, :cond_0

    const-wide/16 v0, 0x0

    cmp-long v4, v2, v0

    if-eqz v4, :cond_0

    const/4 v0, 0x1

    goto :goto_0

    :cond_0
    const/4 v0, 0x0

    :goto_0
    return v0
.end method

在这个代码中不管改什么、怎么改、始终都是无法成功逆向Pro会员 ,此刻觉得自己真的还是好菜

原因分析

1、回头仔细把每个函数都仔细观察了一遍,发现了疑点

isVipEffective() 这个方法是检测 VIP 的有效性,但是检测的逻辑和判断似乎不在这

image.png

2、那么知道了 isVipEffective() 是判断 VIP 的有效性了,那么就得去寻找哪个判断逻辑调用了这个方法

jadx 直接查找用例

image.png

逆向 Pro 会员

1、通过观察查找用例的代码,发现方法 k 似乎有点特殊

image.png

2、跟进 k ,就可以看到判断的逻辑了

先是判断 VipState 不为 null , 接着调用 isVipEffective()

image.png

3、复制 jadx 中的文件名到 Android Killer 查找对应的 smail 文件

文件路径为:e.e.r.g.d

image.png

4、先来看下 smail代码

第二种快速定位的方法:可以直接搜索关键词 VipState

image.png

找到对应的 k 方法

image.png

5、我觉得 smail 代码好像和 jadx 编译的有点出入,然后打开了 JD-GUI 看了一下

image.png

然后复制了一下 JD-GUI 的 smail 文件路径,对比一下

*\ProjectSrc\smali\!\e\e\r\g\d.class

修改后,会员滤镜已经可以使用了

image.png

总结

每个逆向工具编译的代码可能不一样,要学会使用多工具对比法

期待拍照那天的到来

image.png
image.png
image.png

评分

参与人数 10威望 +1 HB +26 THX +6 收起 理由
消逝的过去 + 1
再来壹瓶 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
xiaoxixpj + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
24567 + 1
祥雨 + 2
Jawon + 1
禽大师 + 1
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
Shark恒 + 1 + 20 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一往晴天 发表于 2023-1-12 18:16 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2023-2-25 22:54 | 显示全部楼层

这个还没学到,现看现学!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2023-2-28 08:03 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一生逍遥 发表于 2023-3-25 14:55 | 显示全部楼层

比较实用,谢谢分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
居然有二点五年 发表于 2023-9-12 10:33 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表