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. ARM Cortex-A 编程手册学习笔记
  2. 手机900e模式如何救_苹果手机如何将显示模式改为黑底白字?这个简单!只需4步...
  3. SQL比oracle卡,对比Oracle与SQL Server
  4. 在oracle 11gr2 grid独占模式下,如何使oracle数据库实例伴随OHAS的启动而启动?
  5. 大数据 vr csdn_VR中的数据可视化如何革命化科学
  6. win10计算机无法复制文件,Win10系统下移动、复制、删除文件需要管理员权限的解决方法...
  7. 雷军这么努力,为什么还是干不过 OV?
  8. SPOJ LCMSUM - LCM Sum
  9. 使用预编译库PREBUILT LIBRARY官方说明
  10. shell--字符串是否为空
  11. 使用js实现复选框的全选、取消功能
  12. org.springframework.beans.factory.BeanDefin…
  13. 一定是h的方式不对阅读_41章_[黑篮]一定是H的方式不对!_七零小说网
  14. Java期末重点复习 | 文本版
  15. 金融级云原生如何助力双十一?蚂蚁金服的实践经验是这样
  16. 计算机内存国产,拼多多上买的纯国产内存条会不会翻车?雷赤 内存条评测
  17. zip文件类型如何恢复系统默认值--右键->打开方式中 无 “资源管理器”选项
  18. CyberCat赛博猫,进阶版AXIE
  19. 集合,ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurremtHashMap分别的总结,volatile 关键字的使用
  20. ip话机 mitel_华为IP话机

热门文章

  1. E575: viminfo: Illegal starting char in line: hello=Hello\ \!\How\ are\ you\ \?
  2. Win10 开机突然蓝屏错误代码0xc0000001安全模式也进不了,不用重装系统怎么修复?(已解决)八个解决参考方案
  3. 让阿里再次伟大--钉钉如何长成独角兽的?
  4. 怎么理解VGG-16结构图中的block
  5. 心蓝android版本,心蓝抢票app-心蓝抢票软件预约 _5577安卓网
  6. 华为p10和p10plus区别_华为P10与P10 Plus的区别,不仅仅只是大了一圈
  7. 电信中兴光猫ZXHN F650超管密码获取工具
  8. JPA 学习(四) JPA_EntityManager系列
  9. Ambari-2.7.5.0 + HDP-3.1.5.0网盘地址
  10. Bootstrap 的基本使用方法