问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
去除实名认证弹窗
移动安全
## 前言 如今,网络游戏用户需使用有效身份证件进行实名认证,才可保证流畅体验游戏。本文对去除实名认证弹窗进行研究,仅供学习使用。 ## 实名认证弹窗 进入某手游,首先需要注册一个账号...
前言 -- 如今,网络游戏用户需使用有效身份证件进行实名认证,才可保证流畅体验游戏。本文对去除实名认证弹窗进行研究,仅供学习使用。 实名认证弹窗 ------ 进入某手游,首先需要注册一个账号。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-8577826b5513a9bc39c4f3792449d278f6e2eda1.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-8577826b5513a9bc39c4f3792449d278f6e2eda1.png) 注册好账号之后,进行登陆,登陆成功,弹出实名认证的对话框。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-0ef34491be548edae7a37be40d9e6263f0482bea.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-0ef34491be548edae7a37be40d9e6263f0482bea.png) 分析UI ---- 可以通过UI界面进行分析,发现使用的控件,然后再根据控件在代码中的使用情况,进行进一步逆向分析。 在目录路径:Android Sdk/tools/bin/下,有分析UI界面的一个常用的工具uiautomaatorviewer.bat。 打开工具uiautomaatorviewer.bat,获取当前界面的UI,例如选择姓名 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-e43b358ada71618bd5777075b22e879cbf268675.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-e43b358ada71618bd5777075b22e879cbf268675.png) 通过工具获取到姓名的resource-id是m4399\_ope\_id\_tv\_name。 将apk文件拖入Android Killer中进行反编译,反编译成功后,在工程搜索中搜索m4399\_ope\_id\_tv\_name。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-243c48822452faa7fa84a666b5733da58efbcc19.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-243c48822452faa7fa84a666b5733da58efbcc19.png) 点击搜寻结果的res\\values\\public.xml。查找到m4399\_ope\_id\_tv\_name对应的id号。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-f58c32210ac4f152f62b0573770fbe988fef1026.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-f58c32210ac4f152f62b0573770fbe988fef1026.png) 搜索id号,知道哪些代码中使用了此id,以便继续分析。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-218de6c0f7cc3836616a245245d971be812ba04b.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-218de6c0f7cc3836616a245245d971be812ba04b.png) 并没有搜索到任何开发中的smali代码使用了此id。 将UI转向提交按钮再一次进行尝试。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-ce65368848721b45b387823c0648b4beb93872f3.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-ce65368848721b45b387823c0648b4beb93872f3.png) 获取到提交按钮的resource-id是m4399\_ope\_id\_tv\_commit。 在Android Killer的工程搜索中搜索m4399\_ope\_id\_tv\_commit。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-6326dc6b234afe4b70e91e5c83d781c095201816.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-6326dc6b234afe4b70e91e5c83d781c095201816.png) 点击搜寻结果的res\\values\\public.xml。查找到m4399\_ope\_id\_tv\_commit对应的id号。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-cf27b37606cb717c912bc38c4923aa74e7ea2705.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-cf27b37606cb717c912bc38c4923aa74e7ea2705.png) 同样搜索id号,知道哪些代码中使用了此id,以便继续分析。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-0bb2d9f376956e4e70bbe66aebae101fdc1fb999.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-0bb2d9f376956e4e70bbe66aebae101fdc1fb999.png) 仍是没有搜索到任何开发中的smali代码使用了此id。 将目标重新回到resource-id上,发现m4399\_ope\_id\_tv\_name和m4399\_ope\_id\_tv\_commit的搜索结果中均包含有smali\\cn\\m4399\\operate\\ui\\widget\\AntiAuthDialog.smali。 在Android Killer中定位到两者均出现在AntiAuthDialog.smali的a方法中。 将APK拖入到jadx-gui工具中进行反编译,以便于更方便的查看smali对应的java代码。 反编译后找到AntiAuthDialog.smali的a方法。代码如下: ```java private void a() { ImageView imageView = (ImageView) findViewById(n4.f("m4399_ope_id_iv_close")); LinearLayout linearLayout = (LinearLayout) findViewById(n4.f("m4399_ope_id_ll_account")); TextView textView = (TextView) findViewById(n4.f("m4399_ope_id_tv_account")); TextView textView2 = (TextView) findViewById(n4.f("m4399_ope_id_tv_title")); TextView textView3 = (TextView) findViewById(n4.f("m4399_ope_id_tv_name")); TextView textView4 = (TextView) findViewById(n4.f("m4399_ope_id_tv_identify")); TextView textView5 = (TextView) findViewById(n4.f("m4399_ope_id_tv_foreign")); TextView textView6 = (TextView) findViewById(n4.f("m4399_ope_id_tv_link")); TextView textView7 = (TextView) findViewById(n4.f("m4399_ope_id_tv_tip")); this.e = (TextView) findViewById(n4.f("m4399_ope_id_tv_commit")); TextView textView8 = (TextView) findViewById(n4.f("m4399_ope_id_tv_destroy")); this.c = (LimitEditText) findViewById(n4.f("m4399_ope_id_edt_name")); this.c.setLimitType(1); this.d = (LimitEditText) findViewById(n4.f("m4399_ope_id_edt_identify")); this.d.setLimitType(2); a(imageView, linearLayout, textView2, textView3, textView4, textView6, textView5); a(textView, textView2, textView3, textView4, textView6, textView5); b(textView7); a(textView8); a(imageView, linearLayout, textView6, textView5); } ``` 以resource-id为例m4399\_ope\_id\_tv\_commit为例。 出现的代码处为: ```java this.e = (TextView) findViewById(n4.f("m4399_ope_id_tv_commit")); ``` 首先执行了 ```java n4.f("m4399_ope_id_tv_commit") ``` 所以代码跟进,跳转到n4.f代码处 ```java public static int f(String str) { return a(str, "id"); } ``` n4.f调用了a("m4399\_ope\_id\_tv\_commit", "id")。 继续跟进,跳转到a代码处 ```java public static int a(String str, String str2) { return a.getResources().getIdentifier(str, str2, b); } ``` 可以看到这款APK是通过调用getResources().getIdentifier()方式,获得资源id的,所以之前在搜索id过程中是没有结果的。 所以AntiAuthDialog.smali的a方法,主要是起初始化作用。并不是对话框的部分,不是我们要找的。 方法剖析 ---- 将思路转移,利用工具Android Device Monitor进行方法剖析。 点击start Method Profiling,然后在点击APP的提交,捕捉提交后的方法都执行了哪些。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-75fe20fad87a18694d7348587e643a835226dcfe.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-75fe20fad87a18694d7348587e643a835226dcfe.png) 由正向开发得知,提交按钮之后,会执行onClick方法,所以在Find中搜索onClick字符串。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-c12535e3c31bfcc905980f83c32dc960905dc12d.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-c12535e3c31bfcc905980f83c32dc960905dc12d.png) 得知执行了AntiAuthDialog.onClick方法,所以找到这段代码。 ```java public void onClick(View view) { if (view.getId() == n4.f("m4399_ope_id_tv_commit")) { String obj = this.c.getText().toString(); String obj2 = this.d.getText().toString(); if (!s4.a("[一-龥]+", obj)) { y2.a(view.getContext(), n4.j("m4399_ope_bind_id_real_name_limit_chinese")); } else if (obj2.length() < 18 || !u2.b(obj2)) { y2.a(view.getContext(), n4.j("m4399_ope_bind_id_series_error")); } else if (u2.a(obj2) || !b2.x().r()) { a(this, obj, obj2); } else { dismiss(); v.a("sdk_smrz_window_ok", new a(obj, obj2)); } } } ``` 在上段代码中可以看到有一个dismiss()方法,执行此方法,功能为关闭对话框。 所以只要在点击提交后,跳转到dismiss()处,就可实现去除实名认证弹窗。 通过代码得知,首先判断点击的是提交按钮,然后获取输入的姓名和身份证号,接下来做各种判断。 在Android Killer中找到dismiss()。发现跳转到:cond\_2处,在会执行dismiss()。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-1bd95ce5beb2265c78f3acbb624ca72ea965b790.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-1bd95ce5beb2265c78f3acbb624ca72ea965b790.png) 所以直接在获取姓名和身份证号之后,不做判断,直接跳转到:cond\_2处,就可实现去除实名认证弹窗。 将129行代码,替换为goto :cond\_2 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-4ca5236f57094e4c1593d2cdc6b485cbde370ab7.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-4ca5236f57094e4c1593d2cdc6b485cbde370ab7.png) 修改后进行回编译,此时登陆游戏,输入账号密码后,不会出现实名认证弹窗而是直接进入游戏。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-a1a961eaacff5e7355896ba9b36ceb57dd64d0c4.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-a1a961eaacff5e7355896ba9b36ceb57dd64d0c4.png) 自定义对话框展示 -------- 可以看到AntiAuthDialog的父类是Dialog,这是一个自定义弹窗。 自定义弹窗在使用的时,会进行初始化操作,所以在工程搜索中搜索Lcn/m4399/operate/ui/widget/AntiAuthDialog;。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-f84546d8ac19dcfedc73ab232368db3b43707048.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-f84546d8ac19dcfedc73ab232368db3b43707048.png) 在搜索到的结果中可以看到,在smali.cn.m4399.operate.control.anti.k.smali的a方法中进行了new一个实例和初始化操作。 在jadx工具中找到k.smali的a方法。代码如下: ```java public void a(cn.m4399.operate.d dVar, Map<String, Object> map) { Activity i2 = b2.x().i(); if (i2 != null && !i2.isFinishing()) { a(i2); this.a = new AntiAuthDialog(i2, dVar, new AntiAuthDialog.f().a(new l(dVar, map)).c(new View$OnClickListenerC0010k(dVar, map)).b(new j(i2, dVar)).a(this.h)); b2.x().a().a("first_level_dialog", this.a); this.a.show(); } } ``` 在整个方法的最后执行了a.show,展示了自定义对话框。 所以只要注释掉a.show方法,就可实现去除实名认证弹窗。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-b2c2292f633b99049bbbf235e1c27c8be822c44a.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-b2c2292f633b99049bbbf235e1c27c8be822c44a.png) 注释成功后,进行回编译,登陆游戏,输入账号密码后,不会跳出实名认证弹窗,而是直接进入游戏。 [![](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-0475f089397cd355296fafe89badc5b084180707.png)](https://shs3.b.qianxin.com/attack_forum/2021/11/attach-0475f089397cd355296fafe89badc5b084180707.png) 总结 -- 通过分析UI找到资源id和对应出现的smali代码出处,并通过方法剖析掌握到函数执行过程,最后通过逆向修改smali代码实现去除实名认证弹窗,绕过实名认证。
发表于 2021-12-02 16:30:36
阅读 ( 9968 )
分类:
漏洞分析
1 推荐
收藏
4 条评论
0x001
2021-12-06 10:15
未成年不会搞,成年人用不到系列
请先
登录
后评论
苏苏的五彩棒
2021-12-02 16:51
牛啊牛啊
请先
登录
后评论
bmstd
2021-12-02 18:10
我......我想要......我想要成为最好的红线仙啊!
请先
登录
后评论
bmstd
2021-12-02 18:36
我......我想要......我想要成为最好的红线仙啊!
请先
登录
后评论
请先
登录
后评论
bmstd
13 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!