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)相关推荐

  1. 安卓和php接口数据传输加密,安卓与PHP间的RSA(openssl)交互加密的坑

    这几天在写一个安卓的RSA公钥加密算法,用于跟PHP后台接口进行交互.在实践过程中发现了几个坑.其中我的公钥和私钥都是通过openssl生成的pem格式. 遇到的坑: 1.通过java的RSA公钥加密 ...

  2. 火山安卓RSA加解密操作

    本源码转载自利快云https://www.lkuaiy.com/ 火山安卓RSA文本加解密操作   一.模块配置 1.首先右键项目配置模块 2.找到数据处理支持模块,勾选并确定即可. 二.RSA秘钥对 ...

  3. 安卓下使用 dropbear 开启SSH And arm 下的busybox

    安卓系统 4.2.2  硬件是荣耀立方 只对电视盒子部分进行了操作,没有修改路由部分 先安装<超级终端><RE文件管理器>(华为的应用市场里有),安装 <360超级roo ...

  4. 技术控必看: RSA 2017 信息安全大会技术议程一览 | RSA 2017

    2017年2月13日,RSA Conference 2017信息安全大会将在美国旧金山 Moscone 中心举行.RSA 大会每年都会吸引来自全球各地的顶级信息安全企业.各行业 IT 决策者.资深安全 ...

  5. 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )

    文章目录 一.APK 文件结构 二.APK 打包流程 三.APK 安装流程 四.安卓虚拟机 一.APK 文件结构 Android 应用的安装包时 以 " .apk " 为后缀的 A ...

  6. 【技术分享】如何解锁高通骁龙660上的安卓引导加载程序

    本文是我们在DEF CON 29大会上的演示视频的配套文章,视频的链接地址为https://www.youtube.com/watch?v=z4gIxdFfJDg. 要想在安卓手机上获得root权限, ...

  7. 经验分享 | 通过adbd配置漏洞在安卓设备上提升权限

    近日,Android上的一个本地提权漏洞已被确认,该漏洞可通过设备上运行的Android Debug Bridge Daemon(adbd)被利用. 如果一个安卓设备被发现正在运行于TCP端口监听的a ...

  8. cordova打包安卓app

    1. %bxproject-mobile-client% 运行 npm run buildapp 2. 复制%bxproject-mobile-client%的www里面文件到%bxproject-a ...

  9. android底层rsa加密,android 下RSA加密解密

    参考文章 Base64.java需要换成下面这个类 package club.hb168.hmi.util.rsa; import java.io.ByteArrayOutputStream; imp ...

最新文章

  1. 代码之谜(二)- 语句与表达式
  2. 《剑指offer》-- 树的子结构、二叉树的镜像、二叉树的深度、平衡二叉树
  3. lamba把逗号拼接的字符串转为list
  4. 活用这23种图表,让你的数据分析胜人一筹 | 推荐收藏
  5. Spring boot 连接Redis实现HMSET操作
  6. HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)...
  7. 硬盘坏道隔离工具fbdisk_如何屏蔽硬盘坏道 屏蔽硬盘坏道方法介绍【详解】
  8. RC4算法及其实践(Hello Password)
  9. 遵义 计算机应用能力,遵义市人力资源和社会保障局
  10. c语言股票最大收益_长期持有指数基金是最好的选择?指数基金的历史年化收益率是多少?...
  11. Intel Edison学习笔记(一)—— 刷系统
  12. 日志分析工具Awstats实战之Nginx篇-分析结果静态化
  13. Pycharm汉化后设置无法打开解决办法
  14. Android Webview 设置Cookie问题
  15. Unbuntu 安装Protobuf
  16. dxdiag使用小结
  17. FlyAI资讯:关于Transformer,那些的你不知道的事
  18. bedtools2安装报错:fatal error: zlib.h
  19. Android代理模式(静态代理,动态代理,Retrofit代理模式分析)
  20. 任天堂官宣塞尔达传说新作:为新产品护航?

热门文章

  1. 关于graphql快速入门
  2. raw图的存储格式和读取方式
  3. JavaSE 和 Java EE 分别是什么
  4. DataStream API【3】
  5. Rocky Linux一个可用于生成环境的Linux
  6. 我的名字居然是我爸爸用代码算出来的?
  7. python:输入一个整数正序各个输出,并判断输出位数
  8. 高清视频会议终端市场现状及未来发展趋势分析
  9. 在Linux中查找和删除重复文件的4种方法
  10. 企业如何正确选择gpu服务器,GPU服务器参数——GPU服务器应该如何选择