REVERSE-PRACTICE-JarvisOJ-3
REVERSE-PRACTICE-JarvisOJ-3
- 爬楼梯
- 软件密码破解-1
- Classical CrackMe2
- Smali
爬楼梯
apk文件,放到模拟器里运行一下
“爬一层楼”按钮可按,每按一下,“已爬的楼层”加1层
“爬到了,看FLAG”按钮不可按,应该是“已爬的楼层”等于“要爬的楼层”时,按钮可按,获得flag
jadx-gui打开,在com.ctf.test.ctf_100.MainActivity中,静态加载了ctf库
主要的逻辑在onCreate方法中,要爬的楼层设置为随机数,当已爬的楼层大于等于要爬的楼层时,按看flag按钮即可得到flag
程序开头将看flag的按钮设置为不可按,满足条件后设置为可按,考虑patch程序,让程序开头就将看flag的按钮设置为可按
用jeb打开apk,方便找到java语句对应的汇编代码
可以看到,在onCreate方法开始的部分,v5为0,在下面Button->setClickable中作为参数,将看flag按钮设置为不可按,将v5patch为1时,使得看flag按钮在开始时就被设置为可按
ApkToolBox反编译apk,打开CFF_100\smali\com\ctf\test\ctf_100\MainActivity.smali,找到对应位置并修改保存
将整个CFF_100文件夹拖入ApkToolBox回编译,得到一个新的apk
在模拟器中运行,可以看到,看flag按钮可以直接点击获得flag
软件密码破解-1
32位MFC程序,先用xspy查“确定”按钮的id,为0001
再查整个窗口,知道“确定”按钮对应的响应函数为(0x0040)1BB0
ida打开该MFC程序,左侧函数窗搜索1BB0,来到sub_401BB0函数
分析可知,将输入与byte_5777F8数组按下标顺序地做异或运算,结果与已知数据比较,验证输入
byte_5777F8数组的元素在静态分析中不能得到,需要attach程序调试
写逆异或运算脚本即可得到flag
res=[0x1B, 0x1C, 0x17, 0x46,0xF4, 0xFD, 0x20, 0x30,0xB7, 0x0C, 0x8E, 0x7E,0x78,0xDE]
byte_5777F8=[0x28, 0x57, 0x64, 0x6B, 0x93, 0x8F, 0x65, 0x51, 0xE3, 0x53,0xE4, 0x4E, 0x1A, 0xFF]
flag=""
for i in range(len(res)):flag+=chr(res[i]^byte_5777F8[i])
print(flag)
#3Ks-grEaT_j0b!
Classical CrackMe2
exe程序,输入密码,输入错误时还会打印一串base64
查壳,发现是.Net程序,有一句"don’t Unpack with : de4dot",不要使用de4dot解包
用de4dot可以解包,不过解包后的程序不能运行,
dnSpy打开原来的程序,由于没有unpack,会有一些不明白意义的字符,这时可以开另一个dnSpy打开解包过的程序,对照着来看
对照着看,发现按下"GETFLAG"按钮后,来到这个地方进行判断
text是输入,text2是将输入text传入"Wm@@9OrPgw\u0020d/p?i,N>lh@Y!"的一个方法后返回的内容,然后判断 text是否为空以及 text2是否与已知相同
来看调用的"Wm@@9OrPgw\u0020d/p?i,N>lh@Y!“的那个方法,发现是将传入的参数进行AES.ECB模式的加密,名为bytes的数组作为加密密钥Key,密文用base64编码后再返回
调试,可以知道加密密钥Key为"pctf2016pctf2016pctf2016pctf2016”
text2要比较的字符串为"x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk="
写解AES脚本即可得到flag
from Crypto.Cipher import AES
import base64
key="pctf2016pctf2016pctf2016pctf2016"
cipher="x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk="
cipher=base64.b64decode(cipher)
aes=AES.new(key,AES.MODE_ECB)
print(aes.decrypt(cipher))
#PCTF{Dot_Net_UnPack3r_yoo}
Smali
.smali文件,jadx-jui打开
主要逻辑为,使用已知的密钥和密文,解密ECB模式的AES
写解密AES脚本即可得到flag
from Crypto.Cipher import AES
import base64
key="cGhyYWNrICBjdGYgMjAxNg=="
key=base64.b64decode(key)
cipher="sSNnx1UKbYrA1+MOrdtDTA=="
cipher=base64.b64decode(cipher)
aes=AES.new(key,AES.MODE_ECB)
print(aes.decrypt(cipher))
#PCTF{Sm4liRiver}
REVERSE-PRACTICE-JarvisOJ-3相关推荐
- linux内核路由反向检查,反向路径过滤——reverse path filter
反向路径过滤--reverse path filter 一.原理 先介绍个非对称路由的概念 参考<Understanding Linux Network Internals>三十章, 30 ...
- java中Collections常用方法总结(包括sort,copy,reverse等)
1.sort(Collection)方法的使用(含义:对集合进行排序). 例:对已知集合c进行排序public class Practice {public static void main(Stri ...
- A Guide To Reverse Tethering
By Kevin Pocock on February 04, 2013 Using a mobile device such as a smartphone to act as a hotspot ...
- picoCTF,Reverse Engineering,逆向类,42/55
picoCTF,Reverse Engineering,42/55 2019 picoCTF 01.vault-door-training,50分 02.vault-door-1,100分 03.va ...
- PAT (Advanced Level) Practice 题解代码 - II (1051-1100)
PAT PAT (Advanced Level) Practice - II(1051-1100) -------------------------------------------------- ...
- (Python) PAT(Basic Level) Practice 刷题笔记(34-66)
我的代码仅能解题,效率不高也不够简洁,欢迎师傅们提出建议,能让我加以改进. Practice 1036 跟奥巴马一起编程 (15 分) 1037 在霍格沃茨找零钱 (20 分) 1038 统计同成绩学 ...
- minty_Brit666‘s python practice no.2
minty_Brit666 Today's blog is about the practice of the leetcode. And I'll give my own answer in thi ...
- 【水一波题解】题解 of University of Central Florida 2020 (Fall) “Practice” Local Programming Contest
题解 of University of Central Florida 2020 (Fall) "Practice" Local Programming Contest [by_0 ...
- 动态规划十大经典案例(Dynamic Programming Practice Problems)
目录 leetcode 53 最大子序列和(Maximum Value Contiguous Subsequence) leetcode 53 零钱兑换(Making Change) LeetCode ...
- 206. Reverse Linked List
Reverse a singly linked list. 反转单链表 C++(9ms): 迭代 1 /** 2 * Definition for singly-linked list. 3 * s ...
最新文章
- text-overflow
- 【Visual Studio 2019】创建 导入 CMake 项目
- Visual Studio属性配置中使用宏
- 20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结
- 835. Trie字符串统计
- HDU-1251-统计难题(字典树)
- Go的http库详解
- 在线等:“手里 5 个 offer,优选头条还是阿里?”
- python和java哪个好-现在Java和Python哪个前景更好?
- 离心泵CAE_2_ICEM剖分网格_2_叶轮流道
- 按键精灵通过句柄获取窗口坐标_按键精灵 句柄 获得句柄 控制windows窗口 后台...
- 微x怎么设置主题_微话题:小区设置公共晾衣架,您怎么看?您有什么建议?...
- axure8下拉表单_AXURE RP 8怎么设置下拉菜单? AXURE下拉菜单的制作方法
- ORID焦点呈现法(Focused Conversation Method)
- 二维码的生成细节和原理源码
- struts2框架深入
- [dp优化]个人对dp优化的理解
- 手机怎样转换php格式,手机视频格式转换方法适合所有手机视频格式转换|如何转换手机视频格式...
- 人工智能在集装箱识别中应用
- 数据库常用的sql语句名称大全
热门文章
- 给C盘减减肥,让你电脑飞一般速度!
- [剑指offer][JAVA]面试题第[29]题[顺时针打印矩阵][数组]
- Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法
- elementui图片上传php,vue+element-ui+富文本————图片上传
- cad怎么把图层英文变成中文_CAD图层管理器昨天是中文的今天怎么变英文 – 手机爱问...
- googlenet网络结构_CNN网络结构的发展
- linux 网络设备 安装,Linux_Linux系统配置网络详解,一.安装和配置网络设备- phpStudy...
- mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计
- MongoClient类参考文档
- ClassCastException:AdaptiveIconDrawable cannot be cast to BitmapDrawable