180522 安卓-DDCTF2018(RSA)
RSA
JAVA层没什么东西,直接将输入送入了Native层的stringFromJNI函数
这个函数垃圾代码极其的多
建议动态调试,跟随输入值来观察计算过程
在主函数中首先用gpower生成了32个字节的i²Table,又GetTicks取了两次时间,然而都没有用上
sub_3133C调用了input,从其中用到的字符串
“basic_string::_S_construct null not valid”
来看,应该是静态编译的basic_string类的构造函数
结构体中存放了字符串的长度和其他信息,将指针送给了第一个参数
sub_309E0中没有改变字符串,只是把string的指针送给了返回值,因此就不多纠结了
跟入那个长的很像库函数名字很奇葩但其实就是核心函数的prj函数
上来第一句
if ( *(_DWORD *)(v2 - 12) == 31 )
虽然一般都能猜出来这个31大概就是input的长度,但较真的话往前翻也能在sub_309E0中找到根据,或者动调可以更直观地看到这个数据
继续往下,逐字节异或了byte_4DECB数组,很常规的操作
这里的操作看起来比较复杂,但理清了其实很简单
关键的check其实只有中间那句v10[10]!=*v10
问题在于判断条件何时满足
分析一下,要j>=1,则v11>=10,即ii和v10都已+10
而v10的初值是&d[-10],也就是说异或后的字符串需要从0-30皆满足a[i]==a[i+10]
的关系
也就是一个长为10字节的字符串循环3.1遍
接着将d[10]赋0,也就是仅保留一遍该字符串
用d构造了一个basic_string,将其通过atoll转成整数保存下来
下面的操作比较有意思,将两个字符串构造成string
那个名字超长的函数点进去可以发现是return j_std::map<char,int,std::less<char>,std::allocator<std::pair<char const,int>>>::operator[](a1, a2);
就是STL的map对象,pair对是
for i in range(len(a)):dic[a[i]] = i//2
第二个循环则遍历字符串b,将每个值的value取出连接在nptr中,最后atoll转成一个大整数
当然,比赛的时候没工夫慢慢逆23333直接动调看atoll的结果就是了
最后将两个整数相除,IDA反编译的结果比较乱,需要自己找准变量看
目标是return 1,即要r=1
那么v24必须为0,虽然没有给出v24的来源,不过在栈中可以看到
__int64 v24; // r2@24
v24指的是r2,x86和ARM中的除法函数都是会同时计算出商和余数的,并且余数通常会被放在备选寄存器中,商视操作数长度有时存在返回值寄存器中,有时被拆分成高低两段存在两个寄存器中
而IDA反编译时通常仅关注调用约定中的返回值寄存器,导致这里的v24不知来由
说了这么多,还是动调最方便啦~
因此这里要求big_n整除input_n
继续往下走
v27=1 => v25=0/HIDWORD(input_n)
180522 安卓-DDCTF2018(RSA)相关推荐
- 安卓和php接口数据传输加密,安卓与PHP间的RSA(openssl)交互加密的坑
这几天在写一个安卓的RSA公钥加密算法,用于跟PHP后台接口进行交互.在实践过程中发现了几个坑.其中我的公钥和私钥都是通过openssl生成的pem格式. 遇到的坑: 1.通过java的RSA公钥加密 ...
- 火山安卓RSA加解密操作
本源码转载自利快云https://www.lkuaiy.com/ 火山安卓RSA文本加解密操作 一.模块配置 1.首先右键项目配置模块 2.找到数据处理支持模块,勾选并确定即可. 二.RSA秘钥对 ...
- 安卓下使用 dropbear 开启SSH And arm 下的busybox
安卓系统 4.2.2 硬件是荣耀立方 只对电视盒子部分进行了操作,没有修改路由部分 先安装<超级终端><RE文件管理器>(华为的应用市场里有),安装 <360超级roo ...
- 技术控必看: RSA 2017 信息安全大会技术议程一览 | RSA 2017
2017年2月13日,RSA Conference 2017信息安全大会将在美国旧金山 Moscone 中心举行.RSA 大会每年都会吸引来自全球各地的顶级信息安全企业.各行业 IT 决策者.资深安全 ...
- 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )
文章目录 一.APK 文件结构 二.APK 打包流程 三.APK 安装流程 四.安卓虚拟机 一.APK 文件结构 Android 应用的安装包时 以 " .apk " 为后缀的 A ...
- 【技术分享】如何解锁高通骁龙660上的安卓引导加载程序
本文是我们在DEF CON 29大会上的演示视频的配套文章,视频的链接地址为https://www.youtube.com/watch?v=z4gIxdFfJDg. 要想在安卓手机上获得root权限, ...
- 经验分享 | 通过adbd配置漏洞在安卓设备上提升权限
近日,Android上的一个本地提权漏洞已被确认,该漏洞可通过设备上运行的Android Debug Bridge Daemon(adbd)被利用. 如果一个安卓设备被发现正在运行于TCP端口监听的a ...
- cordova打包安卓app
1. %bxproject-mobile-client% 运行 npm run buildapp 2. 复制%bxproject-mobile-client%的www里面文件到%bxproject-a ...
- android底层rsa加密,android 下RSA加密解密
参考文章 Base64.java需要换成下面这个类 package club.hb168.hmi.util.rsa; import java.io.ByteArrayOutputStream; imp ...
最新文章
- 代码之谜(二)- 语句与表达式
- 《剑指offer》-- 树的子结构、二叉树的镜像、二叉树的深度、平衡二叉树
- lamba把逗号拼接的字符串转为list
- 活用这23种图表,让你的数据分析胜人一筹 | 推荐收藏
- Spring boot 连接Redis实现HMSET操作
- HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)...
- 硬盘坏道隔离工具fbdisk_如何屏蔽硬盘坏道 屏蔽硬盘坏道方法介绍【详解】
- RC4算法及其实践(Hello Password)
- 遵义 计算机应用能力,遵义市人力资源和社会保障局
- c语言股票最大收益_长期持有指数基金是最好的选择?指数基金的历史年化收益率是多少?...
- Intel Edison学习笔记(一)—— 刷系统
- 日志分析工具Awstats实战之Nginx篇-分析结果静态化
- Pycharm汉化后设置无法打开解决办法
- Android Webview 设置Cookie问题
- Unbuntu 安装Protobuf
- dxdiag使用小结
- FlyAI资讯:关于Transformer,那些的你不知道的事
- bedtools2安装报错:fatal error: zlib.h
- Android代理模式(静态代理,动态代理,Retrofit代理模式分析)
- 任天堂官宣塞尔达传说新作:为新产品护航?