嗯 一道apk的题目,题目本身并不是很难,但是我用的python却坑了我小半天。。。不过在纠错的过程中我也学到了不少东西

链接:http://pan.baidu.com/s/1i5LkJDr  密码:46d8

拿到apk程序,在模拟器中模拟一下,如下:

要求输入username和password进行注册

再用jeb软件进行反编译,程序分析过程就不细说了,加密流程是mainactivity->handler->encrpty1->encrypty2 依次对username进行加密,将结果字符串倒置即得到key,将key和username分别作为秘钥和明文进行AES加密,得到的结果进行base64编码,得到的结果应该就是password,输入的password正确的话,就注册成功

于是我就照着思路用python写好了注册机,但是结果报错,

于是我就进行了检查,

注意到源程序里有如下代码:

  Log.v("MainActivity", "AES Key is : " + v2.getNameCalc());
new AESEncrpty();
try {
String v3 = AESEncrpty.Encrypt(v2.getName(), v2.getNameCalc());
Log.v("MainActivity", v3);
String v4 = v2.getPass();
Log.v("MainActivity", v4);

log.v实际上是将结果输出到log文件中,但是在模拟器或者真机上是看不到的,

于是我用到了adb这样一个很神奇的调试器,应用环境:windows平台  模拟器:腾讯手游助手。。。

安装好adb后,最好将adb.exe的路径添加到环境变量中,

打开模拟器,运行程序

打开命令提示符,输入adb devices命令,可以看到如图:

emulator-5554 表示检测到了该模拟器,device表示adb已与该模拟器连接

接着输入adb logcat  查看log文件,接着在模拟器中输入字符后,可以看到,输出的正确的AES key和正确的输出结果,

如下图,我输入的name是:1231231231231231 password是:thisisthepasswordisubmit,log结果如下:

第二个输出是正确的password

而我的是:

 
就差后面那一堆,应该不是base64的问题,查了下发现是PKCS5Padding的问题,由于apk程序中是
   SecretKeySpec v3 = new SecretKeySpec(sKey.getBytes("utf-8"), "AES");
Cipher v0 = Cipher.getInstance("AES/ECB/PKCS5Padding");
v0.init(1, ((Key)v3));
v4 = Base64.encodeToString(v0.doFinal(sSrc.getBytes("utf-8")), 2);

故要在python中声明pad模式,添加后,脚本就正确了,如下:

#coding=utf-8
from Crypto.Cipher import AES
import base64 str="ThisIsNotFL@GplzDonnotSubmitThisString#HaveFunWithGeekmastergogo"
str2="talkischeapshowmethecode$ischeapshowmethe#SycSYC{IamNotFLAG2333}"
xorstring="o0xmuhe" username=raw_input("please input the username, its length must be 16:") v11=''
for v5 in range(len(username)):
v11+=chr(ord(username[v5])+3) v8=''
for v6 in range(len(v11)):
v8+=str[ord(v11[v6])%len(str)] v2=''
for v0 in range(len(v8)):
v2+=chr(ord(v8[v0])^ord(xorstring[v0%7])) v3=''
for v1 in range(len(v8)):
v3+=str2[(ord(v2[v1])+7)%len(str2)] getnamecalc=v3[::-1] print "the AES key is:",getnamecalc mode=AES.MODE_ECB
BS = AES.block_size
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
encryptor=AES.new(getnamecalc,mode)
ciphertext=encryptor.encrypt(pad(username)) out=base64.b64encode(ciphertext) print "the password should be:",out

REVERSE-极客大挑战-geek2.apk的更多相关文章

  1. 2016第七季极客大挑战Writeup

    第一次接触CTF,只会做杂项和一点点Web题--因为时间比较仓促,写的比较简略.以后再写下工具使用什么的. 纯新手,啥都不会.处于瑟瑟发抖的状态. 一.MISC 1.签到题 直接填入题目所给的SYC{ ...

  2. BUUOJ [极客大挑战 2019]Secret File

    [极客大挑战 2019]Secret File 0X01考点 php的file伪协议读取文件 ?file=php://filter/convert.base64-encode/resource= 0X ...

  3. 三叶草极客大挑战2020 部分题目Writeup

    三叶草极客大挑战2020 部分题目Writeup Web Welcome 打开后状态码405,555555,然后看了一下报头存在请求错误,换成POST请求后,查看到源码 <?php error_ ...

  4. [原题复现][极客大挑战 2019]BuyFlag

    简介  原题复现:[极客大挑战 2019]BuyFlag  考察知识点:php函数特性(is_numeric().strcmp函数())  线上平台:https://buuoj.cn(北京联合大学公开 ...

  5. 极客大挑战2019 http

    极客大挑战 http referer 请求头 xff 1.查看源码,发现secret.php 2.提示要把来源改成Sycsecret.buuoj.cn,抓包,添加Referer Referer:htt ...

  6. 2020极客大挑战Web题

    前言 wp是以前写的,整理一下发上来. 不是很全. 2020 极客大挑战 WEB 1.sha1碰撞 题目 图片: 思路 题目说,换一种请求方式.于是换成post.得到一给含有代码的图片 图片: 分析该 ...

  7. BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf)+[极客大挑战 2019]LoveSQL(联合注入)

    BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf) 记一道联合注入的题,这道题存在过滤. 经过手工的测试,网站会检验用户名和密码是否都存在,如果在用户名处插入注入语句,语句后面 ...

  8. 第九届极客大挑战 部分WP

    CODE 和0xpoker分0day 百度 取石子游戏. https://blog.csdn.net/qq_33765907/article/details/51174524 已经说得很详细了,慢慢来 ...

  9. SYC极客大挑战部分题目writeup

    Welcome 复制黏贴flag即可 我相信你正在与我相遇的路上马不停蹄 关注微信工作号回复"我要flag"即可获得flag 代号为geek的行动第一幕:毒雾初现 发现flag为摩 ...

随机推荐

  1. Python’s SQLAlchemy vs Other ORMs[转发 1]SQLObject

    SQLObject SQLObject is a Python ORM that maps objects between a SQL database and Python. It is becom ...

  2. HTML 或 CSS 文件中引用的图片文件移动到任意位置

    对于一个套接字的输入操作,第一步通常涉及等待数据从网络到达,当所等待分组到达时,被复制到内核的某个缓冲区: 第二步就是把数据从内核缓冲区复制到应用进程缓冲区.通过 Session 的 createQu ...

  3. 解决Gradle生成Eclipse支持后,发布到Tomcat丢失依赖jar包的问题

    最近一个项目中,使用号称下一代构建工具的Gradle构建项目. 使用中发现一个问题,Gradle从中央库下载的jar文件在系统的其它目录,使用gradle eclipse添加Eclipse支持时,ja ...

  4. EntityFramework CodeFirst SQLServer转Oracle踩坑笔记

    接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...

  5. 删除 https://tfs.visualstudio.com上的项目

    比如注册的tfs地址为https://zhaobl.visualstudio.com,要删除的项目是 bushub 那么需要使用VS2013以上的 C:\Program Files (x86)\Mic ...

  6. JAVA中的类和接口

    1.类: 类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...

  7. 微信的redirect_uri参数错误解决办法

    近期,我们在调试独立的微信商城的时候,遇到了一些问题,比如:微信的redirect_uri参数错误,这是一个很普遍存在的问题,当然解决起来并不难,首先,我们得去找到发生这一事件的原因. 可能1:授权目 ...

  8. sublime简书安装配置

    sublime-text3编辑器 安装 sudo add-apt-repository ppa:webupd8team/sublime-text-3 sudo apt-get update sudo ...

  9. 几种排序算法的学习,利用Python和C实现

    之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...

  10. android中添加背景音乐

    方法一:这是使用java中的多线程,另外new出一个类,用类来启动音乐. 这个方法,就像当初写java的小游戏一样,不过是在电脑上运行的,可以控制每一个动作,比如你的触碰动作,但是,在我这个游戏中,我 ...