XCTF_Android 黑客精神
一.概述
这题感觉要懂一些开发的东西才能弄,正向和逆向是永远离不开的
二.先用jeb打开,找到AndroidMainfest这个文件,找到启动的主活动是啥

虽然一般也是就是MainActiivity,不过确实一下也挺好的,发现就是这个活动,我们跟进去看看
三.跟进MainActivity

先看这个onCreate方法,毕竟启动这个活动是先调用这个方法的。
然后发现有个Myapp.m的字段,是用来是否注册的东西,这波讲道理有点意思
这个默认是初始化为0的,毕竟你什么都没输入能注册的了吗。。。
接下来才是重点。


这里给按钮设置了一个点击事件,由于上面已经知道是默认为0了,所以看if就够了,再跟进去

设置了一个隐式的intent对象,startActivity之后,启动这个活动

这里又调用了一个方法出来getApplication方法返回一个对象再调用一个saveSn()方法来验证注册码的,点击那个方法,跟进去

System.loadLibrary是动态加载so文件的方法,原理就是先将so文件下载到本地之后,再复制到对应安装包的路径下,这步比较关键
然后就是native都是so文件中的函数,不过是过jni来调用,发现这个流程是先调用initSN()方法,再调用这个东西,saveSn()方法
这里就需要找so文件中的东西了,ida安排
这里讲道理挺懵的,毕竟ndk的玩意没接触过,动态加载要找JNI_ONload方法,找它的动态注册表

找它的注册表

这里其实已经很明显了,n1 -》initSN,n2-》saveSN,n3->work
先看n1

这里其实就是从/sdcard/reg.dat中取出字符串,和那个E开头的判断是否相等,并改变v8的值,这里v8的值其实挺关键的,后面就会知道
接下来看n2

这里就是对注册码一波处理,其实就是对每个字符异或一个值,这里挺好逆的。将加密后的结果存入那个文件中
接下来n3

发现getValue()方法取出了一个值,用来判断的,说明要为1时就对了,而且还调用了n1一次,不就是前面处理后的结果和E开头的字符串比较吗
直接写算法逆回去就结束了
a="EoPAoY62@ElRD"
b="W3_arE_whO_we_ARE"
v10=0
v9=2016
flag=""
for i in range(len(a)):
if v10%3==1:
v9=(v9+5)%16
v11=b[v9+1]
elif v10%3==2:
v9=(v9+7)%15
v11=b[v9+2]
else :
v9=(v9+3)%13
v11=b[v9+3]
flag+=chr((ord(a[v10])^ord(v11)&0xff))
v10+=1 print(flag)
记得加入xman{}括号中
XCTF_Android 黑客精神的更多相关文章
- 读书摘要,一种新的黑客文化:programming is forgetting
http://opentranscripts.org/transcript/programming-forgetting-new-hacker-ethic/ 这篇文章非常有意思,作者是一个计算机教师, ...
- 黑客们的故事(连载六):IT世界里的理想主义者
一头疏于梳理的长发和一把肆意生长的大胡子,往往可能是人们对于理查德马修斯托曼的第一印象.这位马上就要过60岁生日的自由软件基金会主席不用手机.不买房.没有汽车,看起来像是个流浪汉,但是却是美国工程院院 ...
- 【Sharing】如何成为一名黑客
[声明]此文为转载,只为收藏. 从小到大听说了无数关于“电脑黑客”的故事,比如XXX入侵美国五角大楼,再比如前几年的“熊猫烧香”病毒,这些故事的主角都被我们的媒体称之为“黑客”.其实这些人,更大程度上 ...
- Linux是一门真正的黑客高手艺术
黑客这个词从诞生到现在,从来就没有解释为“高级入侵者”.“病毒制造者”或者“QQ盗号者”过.我至今不清楚在中国是谁先把黑客和这些无聊的词汇联系在了一起,导致如此多的人被误导.但有一点是肯定的,不负责任 ...
- 黑客白皮书:如何成为一名黑客(附FAQ)
内容一览 为什么会有这份文档? 什么是黑客? 黑客应有的态度 黑客的基本技能 黑客文化中的地位 黑客和书呆子(Nerd)的联系 风格的意义 其它资源 FAQ(常问问题解答) 作为Jargon Fi ...
- 多名历年高考状元最终选择做中国顶尖黑客 - imsoft.cnblogs
原标题:揭秘中国顶尖黑客:二分之一是历年高考[微博]状元 “二分之一是各地的历年高考状元,二分之一是数学专业,二分之一来自微软.” Keen这样的团队是坚决与黑产划清界限的,这也是圈内的“道德洁癖”, ...
- 软工读书笔记 week4 ——《黑客与画家》下
因为时间有限,只对书中后半部分几个篇章进行了阅读. 一.另一条路 作者以他自己为例,在那个没人知道什么叫“软件运行在服务器时”的时代,他和朋友选择创业时,没有选择写传统的桌面 ...
- redux-amrc:用更少的代码发起异步 action
很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
随机推荐
- JQuery 基础之基本选择器
1.什么是jQuery选择器: jQuery选择器继承了CSS与Path语言的部分语法,允许通过标签名.属性名或内容对DOM元素进行快速.准确的选择,而不必担心浏览器的兼容性,通过jQuery选择器对 ...
- kubectl cmd
集群资源查看 kubectl get nodes #查看节点状态 kubectl get cs #kubectl检查组件健康状态 kubectl get pods kubectl get all ku ...
- untiy项目中使用MD5加密
没有详细研究过暂时贴上代码以便以后研究: public static string MD5Encrypt(string strText) { MD5 md5 = MD5.Create(); byte[ ...
- 从Lombok到JSR-269
前言 Lombok的出现帮助开发人员在开发工程中消除了大部分冗余代码:繁琐的get.set方法甚至建造者模式. Lombok的实现方式是什么呢? 新建一个测试类使用Lombok的Getter和Sett ...
- CRC校验原理简介及C代码实现说明
1 原理 参考文档:CRC校验 (qq.com) 参考书籍:<计算机网络(第7版)-谢希仁> 1.1 原理简介 CRC是一种检错方法. 在发送端,先把数据划分为组,假定每组k个比特.现假定 ...
- Python单元测试简介及Django中的单元测试
Python单元测试简介及Django中的单元测试 单元测试负责对最小的软件设计单元(模块)进行验证,unittest是Python自带的单元测试框架. 单元测试与功能测试都是日常开发中必不可少的部分 ...
- 负载均衡算法: 简单轮询算法, 平滑加权轮询, 一致性hash算法, 随机轮询, 加权随机轮询, 最小活跃数算法(基于dubbo) java代码实现
直接上干活 /** * @version 1.0.0 * @@menu <p> * @date 2020/11/17 16:28 */ public class LoadBlance { ...
- Android 小知识点笔记
获取 view 的位置 View.getLocationInWindow(int[] location) 一个控件在其父窗口中的坐标位置 View.getLocationOnScreen(int[] ...
- Centos7 安装 Zabbix Server 4.0
官方参考URL:https://www.zabbix.com/documentation/4.0/start 1. 安装 Apache 2.4(略) 注意系统时间/时区ntp server是否定时同步 ...
- jmeter--JSON Extractor 用法
JMeter处理大部分请求返回的结果,都是json.对于请求返回的结果,处理以后作为其他请求的参数,有一个方便使用的插件:JSON Extractor JSON Extractor中文叫做json提取 ...