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>l
h@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相关推荐

  1. linux内核路由反向检查,反向路径过滤——reverse path filter

    反向路径过滤--reverse path filter 一.原理 先介绍个非对称路由的概念 参考<Understanding Linux Network Internals>三十章, 30 ...

  2. java中Collections常用方法总结(包括sort,copy,reverse等)

    1.sort(Collection)方法的使用(含义:对集合进行排序). 例:对已知集合c进行排序public class Practice {public static void main(Stri ...

  3. 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 ...

  4. picoCTF,Reverse Engineering,逆向类,42/55

    picoCTF,Reverse Engineering,42/55 2019 picoCTF 01.vault-door-training,50分 02.vault-door-1,100分 03.va ...

  5. PAT (Advanced Level) Practice 题解代码 - II (1051-1100)

    PAT PAT (Advanced Level) Practice - II(1051-1100) -------------------------------------------------- ...

  6. (Python) PAT(Basic Level) Practice 刷题笔记(34-66)

    我的代码仅能解题,效率不高也不够简洁,欢迎师傅们提出建议,能让我加以改进. Practice 1036 跟奥巴马一起编程 (15 分) 1037 在霍格沃茨找零钱 (20 分) 1038 统计同成绩学 ...

  7. 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 ...

  8. 【水一波题解】题解 of University of Central Florida 2020 (Fall) “Practice” Local Programming Contest

    题解 of University of Central Florida 2020 (Fall) "Practice" Local Programming Contest [by_0 ...

  9. 动态规划十大经典案例(Dynamic Programming Practice Problems)

    目录 leetcode 53 最大子序列和(Maximum Value Contiguous Subsequence) leetcode 53 零钱兑换(Making Change) LeetCode ...

  10. 206. Reverse Linked List

    Reverse a singly linked list. 反转单链表 C++(9ms):  迭代 1 /** 2 * Definition for singly-linked list. 3 * s ...

最新文章

  1. text-overflow
  2. 【Visual Studio 2019】创建 导入 CMake 项目
  3. Visual Studio属性配置中使用宏
  4. 20162329 张旭升 2017 - 2018 《程序设计与数据结构》第五周总结
  5. 835. Trie字符串统计
  6. HDU-1251-统计难题(字典树)
  7. Go的http库详解
  8. 在线等:“手里 5 个 offer,优选头条还是阿里?”
  9. python和java哪个好-现在Java和Python哪个前景更好?
  10. 离心泵CAE_2_ICEM剖分网格_2_叶轮流道
  11. 按键精灵通过句柄获取窗口坐标_按键精灵 句柄 获得句柄 控制windows窗口 后台...
  12. 微x怎么设置主题_微话题:小区设置公共晾衣架,您怎么看?您有什么建议?...
  13. axure8下拉表单_AXURE RP 8怎么设置下拉菜单? AXURE下拉菜单的制作方法
  14. ORID焦点呈现法(Focused Conversation Method)
  15. 二维码的生成细节和原理源码
  16. struts2框架深入
  17. [dp优化]个人对dp优化的理解
  18. 手机怎样转换php格式,手机视频格式转换方法适合所有手机视频格式转换|如何转换手机视频格式...
  19. 人工智能在集装箱识别中应用
  20. 数据库常用的sql语句名称大全

热门文章

  1. 给C盘减减肥,让你电脑飞一般速度!
  2. [剑指offer][JAVA]面试题第[29]题[顺时针打印矩阵][数组]
  3. Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法
  4. elementui图片上传php,vue+element-ui+富文本————图片上传
  5. cad怎么把图层英文变成中文_CAD图层管理器昨天是中文的今天怎么变英文 – 手机爱问...
  6. googlenet网络结构_CNN网络结构的发展
  7. linux 网络设备 安装,Linux_Linux系统配置网络详解,一.安装和配置网络设备- phpStudy...
  8. mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计
  9. MongoClient类参考文档
  10. ClassCastException:AdaptiveIconDrawable cannot be cast to BitmapDrawable