(Jarvis Oj)(Re)Smali

Jarvis步进法(Jarvis March)凸包算法 这样可以确保在构建的凸包上,点的极角是递增的,最终形成一个逆时针方向的凸多边形。算法的时间复杂度主要取决于对点的排序操作,通常为O(n log n),其中n是点的数量。从点集中选择一个起始点,然后在每一步中选择下一个顶点,该顶点是当前点集中与当前点形成的线段上,极角最小的点。扫描过程: 从起始点开始,选择当前点(假设为p),然后选择下一个点(假设为q),这个点是当前点p与其他点形成的线段上,极角最小的点。选择起始点的过程可以通过遍历点集,找到y坐标最小的点,并在y坐标相同时,选择x坐标最小的点。 阅读详情

(Jarvis Oj)(Re)Smali

安卓的smali文件,有自己的语法,熟悉这个语法可以直接还原成源文件。然而我并看不懂。应为程序比较简单所以靠猜也是可以知道大概意思的。

.class public Lnet/bluelotus/tomorrow/easyandroid/Crackme;
.super Ljava/lang/Object;
.source "Crackme.java"
# instance fields
.field private str2:Ljava/lang/String;
# direct methods
.method public constructor <init>()V
    .locals 1
    .prologue
    .line 22
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    .line 21
    const-string v0, "cGhyYWNrICBjdGYgMjAxNg==" ;可疑字符串1
    iput-object v0, p0, Lnet/bluelotus/tomorrow/easyandroid/Crackme;->str2:Ljava/lang/String;
    .line 23
    const-string v0, "sSNnx1UKbYrA1+MOrdtDTA==";可疑字符串2
    invoke-direct {p0, v0}, Lnet/bluelotus/tomorrow/easyandroid/Crackme;->GetFlag(Ljava/lang/String;)Ljava/lang/String;
    .line 24
    return-void
.end method
.method private GetFlag(Ljava/lang/String;)Ljava/lang/String;  //getflag method;可疑函数1
    .locals 4
    .param p1, "str"    # Ljava/lang/String;
    .prologue
    const/4 v3, 0x0
    .line 27
    invoke-virtual {p1}, Ljava/lang/String;->getBytes()[B
    move-result-object v2
    invoke-static {v2, v3}, Landroid/util/Base64;->decode([BI)[B
    move-result-object v0
    .line 29
    .local v0, "content":[B
    new-instance v1, Ljava/lang/String;
    iget-object v2, p0, Lnet/bluelotus/tomorrow/easyandroid/Crackme;->str2:Ljava/lang/String;
    invoke-virtual {v2}, Ljava/lang/String;->getBytes()[B
    move-result-object v2
    invoke-static {v2, v3}, Landroid/util/Base64;->decode([BI)[B
    move-result-object v2
    invoke-direct {v1, v2}, Ljava/lang/String;-><init>([B)V
   .line 30
   .local v1, "kk":Ljava/lang/String;
    sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream;
  invoke-direct {p0, v0, v1}, Lnet/bluelotus/tomorrow/easyandroid/Crackme;->decrypt([BLjava/lang/String;)Ljava/lang/String;
      move-result-object v3
invoke-virtual {v2, v3}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
    .line 31
    const/4 v2, 0x0
    return-object v2
.end method
.method private decrypt([BLjava/lang/String;)Ljava/lang/String;可疑函数2
    .locals 8
    .param p1, "content"    # [B
    .param p2, "password"    # Ljava/lang/String;
    .prologue
    .line 35
    const/4 v4, 0x0

    .line 37
    .local v4, "m":Ljava/lang/String;
    :try_start_0
    invoke-virtual {p2}, Ljava/lang/String;->getBytes()[B

    move-result-object v3

    .line 38
    .local v3, "keyStr":[B
    new-instance v2, Ljavax/crypto/spec/SecretKeySpec;

    const-string v7, "AES"

    invoke-direct {v2, v3, v7}, Ljavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V

    .line 39
    .local v2, "key":Ljavax/crypto/spec/SecretKeySpec;
    const-string v7, "AES/ECB/NoPadding";可疑字符串3

    invoke-static {v7}, Ljavax/crypto/Cipher;->getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;

    move-result-object v0

    .line 40
    .local v0, "cipher":Ljavax/crypto/Cipher;
    const/4 v7, 0x2

    invoke-virtual {v0, v7, v2}, Ljavax/crypto/Cipher;->init(ILjava/security/Key;)V

    .line 41
    invoke-virtual {v0, p1}, Ljavax/crypto/Cipher;->doFinal([B)[B

    move-result-object v6

    .line 42
    .local v6, "result":[B
    new-instance v5, Ljava/lang/String;

    invoke-direct {v5, v6}, Ljava/lang/String;-><init>([B)V
    :try_end_0
    .catch Ljava/security/NoSuchAlgorithmException; {:try_start_0 .. :try_end_0} :catch_1
    .catch Ljavax/crypto/NoSuchPaddingException; {:try_start_0 .. :try_end_0} :catch_0
    .catch Ljava/security/InvalidKeyException; {:try_start_0 .. :try_end_0} :catch_4
    .catch Ljavax/crypto/IllegalBlockSizeException; {:try_start_0 .. :try_end_0} :catch_2
    .catch Ljavax/crypto/BadPaddingException; {:try_start_0 .. :try_end_0} :catch_3

    .end local v4    # "m":Ljava/lang/String;
    .local v5, "m":Ljava/lang/String;
    move-object v4, v5

    .line 46
    .end local v0    # "cipher":Ljavax/crypto/Cipher;
    .end local v2    # "key":Ljavax/crypto/spec/SecretKeySpec;
    .end local v3    # "keyStr":[B
    .end local v5    # "m":Ljava/lang/String;
    .end local v6    # "result":[B
    .restart local v4    # "m":Ljava/lang/String;
    :goto_0
    return-object v4

    .line 43
    :catch_0
    move-exception v1

    .line 44
    .local v1, "e":Ljava/security/GeneralSecurityException;
    :goto_1
    invoke-virtual {v1}, Ljava/security/GeneralSecurityException;->printStackTrace()V

    goto :goto_0

    .line 43
    .end local v1    # "e":Ljava/security/GeneralSecurityException;
    :catch_1
    move-exception v1

    goto :goto_1

    :catch_2
    move-exception v1

    goto :goto_1

    :catch_3
    move-exception v1
 goto :goto_1
:catch_4    
    move-exception v1
goto :goto_1
.end method

大致浏览一下发现三个可疑字符串,和两个可疑函数。字符串中有个“AES/ECB/NoPadding”怀疑是将字符串进行加密。刚好前面发现两个base64编码的字符串,尝试解码两个字符串,第一个解出来是“phrack ctf 2016”,第二个解出来是乱码,又发现第一个字符串是16个字节的。所以有理由相信,第一个字符串是密钥,第二个字符串是AES128加密之后的密文。于是写得解密脚本。

 1 import base64
  2 from Crypto.Cipher import AES
  3 
  4 key='cGhyYWNrICBjdGYgMjAxNg=='                         
  5 cipher='sSNnx1UKbYrA1+MOrdtDTA=='
  6 str1=base64.b64decode(key)
  7 str2=base64.b64decode(cipher)
  8 aes=AES.new(str1,AES.MODE_ECB)
  9 print aes.decrypt(str2)
Jarvisoj 逆向总结 因为本人是菜鸟,所以由简单但难的做了 [61dctf]androideasy 没什么可说的,直接反汇编打求一下密码 #_*_coding:utf-8_*_ a=[113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100, 78, 72, 87, 121, 83, 101, 39, 62, 94,... 阅读详情

相关推荐

JarvisAlgorithm:Jarvis算法-Java

带有GUI的Java程序,允许您通过单击GUI屏幕在一组点上运行Jarvis算法。 在计算几何中,礼品包装算法是一种用于计算给定点集的凸包的算法。 Jarvis算法(或也称为礼品包装算法)

安卓逆向——初读smali代码改写(二)

上一篇 对比Dalvik虚拟机操作码来阅读 smail 代码和改写 # instance fields 实例字段 # instance (标识字段) # private (访问权限修饰符,表示私有的) # :(冒号是字段名 与 字段类型的分隔符) # Ljava/lang/String 表示字段类型 #invoke-direct 表示调用 直接方法 invoke-direct {p0, v0}, Lnet/bluelotus/tomorrow/easyandroid/Cra...

含笑 1974

Graham Jarvis两种算法求散点集凸包

本文参考自<>章节33.3 寻找凸包,用C++实现了,Grahan和Jarvis两种算法求平面散点集的凸包,注释详细,代码精简,并用OpenGL绘制出所求结果予以验证.

凸包算法Jarvis's march步进法和Graham扫描法的原理及实现

凸包概念 在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。 用自己的话说就是在一个点集中,能够包含所有点的凸多边形(所有的点都能落入多边形的内部)。专业的描述可以通过百度百科了解。在作者Kyle Loudon的《Mastering Algorithms with C》一书的中文版中描述到一个点集的凸包是指包含该点集中的所有点的最小凸多边形。如果一个多边形内任意两...

沉默、凝视的博客 1903

凸包算法 Jarvis GrahamScan 两种算法对比

两种凸包算法 算法导论的详细实现 C++ VS2008

【GAN】pytorch-CycleGAN-and-pix2pix开源项目训练自定义数据集

Github:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 一、概念简介 图像转换:将一张图片转换为不同风格的图片,如将一张灰度图变成彩色图,素描图换成实物图。 pix2pix:需要成对的数据集,两个不同域的图像一一对应。 CycleGAN:不需要成对的数据集,只用两个不同域(domain)的图像集合X和Y,两个集合中的图像不是一一对应的。 二、训练pix2pix模型 2.1 combine_A_and_B datasets/combin

See_Star的博客 4756

平面凸包(jarvis算法)

算法大体思想:形成凸包的构造函数是这样的,找到一条直线l过其中一点(记为A)并且所有其他点都在l的同侧(显然这样的直线一定可以找到),则A必为凸包上的一点。让l以A为轴点向一个方向(比如:顺时针方向)不断旋转,直到l碰到除A以外的第一个点(记为B)。如果同时碰到多于一个点,则取与A点距离最大的。再次以B为轴点,向相同的方向的旋转l,重复上述过程,直到l回到A点。 附上代码: #includ...

肘子的博客 2190

【STM32CubeIDE入门】(一)工程创建&工程配置

​写在前面:如果是刚接触stm32cubeide的同学推荐与这一篇文章共同阅读,能够更加快速认识上手stm32cubeide。 1、打开stm32cubeide,选择好工作目录进入主界面后,点击创建工程。

涛涛子的博客 1万+

从数学出发搞懂“凸包”问题

文章目录问题背景一、初步思考二、向量的叉乘三、两种思路1.Jarvis算法2.Graham算法总结 问题背景 二维平面上有n个点(x,y),现在我们要找一个多边形(也可能是一条直线,比如只有两个点或多点贡献),使得这个多边形完全包住这些点(在边界内含边界),返回在多边形上的点的坐标。(可以想象成围栅栏——安装栅栏) 一、初步思考 这个多边形该如何寻找?或者说如何围栅栏?直观地来看,我们要选找最"外围"的点,这些点之间的连线就是我们要寻找的图形。可是如何定义这个外围?如何比较两个点哪个更靠外呢? 我们可以

m0_51409962的博客 773

postgresql 数据库 timescaledb 函数time_bucket_gapfill()报错解决及更换 license

最近在工作中使用postgresql 和 timescaledb 的time_bucket_gapfill()函数 报错,让更换license,在网上找了一大圈,没有找到,最后解决了这个问题,这篇文章记录我的解决办法查看timescaledb.license参数命令:show timescaledb.license;修改命令: 结果不行,报错如下:lter system set timescaledb.license=‘timescale’;那只能换包了如果出现上面那种情况,那我们只能先从官网上下载带 '

yang_z_1的博客 3249

华为昇腾 910B 实战:DeepSeek-R1 蒸馏模型高效部署与性能调优全解析

本文详细解析了在华为昇腾910B硬件平台上高效部署DeepSeek-R1蒸馏系列模型(14B/32B版本)的完整实战流程。内容涵盖从MindIE环境搭建、镜像获取、模型准备,到服务配置、内存参数调优、性能测试及常见问题排查,为开发者提供了基于昇腾910B进行大模型部署与优化的全链路指南。

weixin_28235513的博客 210

Jarvis OJ 刷题题解 RE

最近比赛有点多 决定把 脱强壳 还有软件调试 还有 漏洞战争 放一放 先刷一些题目压压惊 最终还是选择了 Jarvis OJ (buuctf 太卡了。。。 以前也写过几道 === 希望能把上面的题目刷个80%。。 PWN的以前写过 到时候拾起来 把那个PWN博客也更一下 然后把我自己以前写的博客直接粘贴到这上面 以前写的 这里就不再说了 Jarvis OJ 软件密码破解-1 ...

qq_41071646的博客 960

手把手带你死磕ORBSLAM3源代码(一)目录详解

ORB-SLAM3是一种基于特征点的稀疏实时单目SLAM(Simultaneous Localization and Mapping)系统。它是ORB-SLAM系列模型的第三代版本,用于在无人机、机器人和增强现实等领域中进行实时定位和建图。ORB-SLAM3使用了一种特征点提取和描述算法,称为ORB(Oriented FAST and Rotated BRIEF)。该算法能够提取图像中的稳定特征,并将其用于地图建立和相机定位。

anananajiushiwo的博客 2300

Jarvis OJ Smali逆向总结

smali文件下载以后,先使用smali2dex转换为dex文件,再放到Android逆向助手中,转换为jar文件打开。 看到这里,就已经非常清晰,首先是str2的值base64解密以后,作为key,AES解密flag。 from Crypto.Cipher import AES import base64 a = base64.b64decode('sSNnx1UKbYrA1+MOrdtD...

re_psyche的博客 504

Python 爬虫实战:爬取电商平台商品信息(价格 / 销量 / 评价)

摘要:本文详细介绍基于Python的电商商品信息爬取技术方案,以京东商品详情页为例,对比分析静态(BeautifulSoup)和动态(Selenium)两种爬取方式的实现逻辑。静态爬取适合获取基础信息,而动态爬取可解决JS渲染数据的获取问题。文章包含完整的代码实现、反爬规避策略及数据存储方案,涵盖商品名称、价格、销量、评价等核心数据提取。同时强调爬虫的合规使用,提供扩展方向建议,为电商数据采集提供实用技术参考。

2503_91057718的博客 2023

19、硬件工程师笔试面试——无线通讯模块(2025版本)

例如,如果你的项目需要传输大量数据,如视频流或大数据文件,那么你可能需要一个高速率的模块,如支持802.11ac或802.11ax(WiFi 6)的模块。如果你的数据传输需求较小,如传感器数据,那么一个较低速率的模块,如蓝牙或Zigbee,可能就足够了。较高的频率(如5GHz)提供更大的带宽,支持更高的数据传输速率,但信号覆盖范围较小,穿透能力较弱。例如,在蓝牙通信中,一台设备作为主机,另一台设备作为从机,它们通过频率跳频的方式确定连接,并在连接建立后通过特定的协议进行数据交换。

XU157303764的博客 3226

Leetcode0587. 安装栅栏(difficult)

Leetcode0587. 安装栅栏(difficult),Python题解,过于硬核,摘抄官解

chenxy_bwave的专栏 709

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Jarvis 算法

在 Jarvis 算法中,我们从最左边的点开始,不断寻找相对于当前点具有最小极角的点作为下一个凸包上的点,重复这个过程,直到回到起始点,从而构建出整个凸包。这段代码就是实现这个过程的具体逻辑。这段代码通过不断循环,从当前点出发,遍历所有点,找到相对于当前点具有最小极角的点作为下一个凸包点,直到回到起始点,从而构建出完整的凸包。凸包是包含给定点集的最小凸多边形。凸多边形的一个重要性质是,对于多边形上的任意一条边,多边形上的所有其他点都位于这条边的同一侧。

m0_46322965的博客 1089

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Jarvis OJ 【REVERSE】 Smali

题目:都说学好Smali是学习Android逆向的基础,现在刚好有一个smali文件,大家一起分析一下吧~~ 链接:Crackme.smali.36e0f9d764bb17e86d3d0acd49786a18 之前接触过点smali,看下文件就是smali,本来想找smali转java工具,但看了下smali发现几个函数名能推出东西,如下 然后结合smali语法花点时间看了...

qq_26779635的博客 1209

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JARVIS OJ re方向部分题解

JARVIS OJ re方向部分题解 闲来没事,把以前写过的题目wp写一下吧 都是简单的哟 Androideasy 放进jeb a = [113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100, 78, 72, 87, 121, 83, 101, 39, 62, 94, 62, 38, 107, 115,...

皮三宝好菜的博客 433

Smali和逆向分析

1.Smali简介 Smali是Dalvik的寄存器语言,它与Java的关系,简单理解就是汇编之于C。假如你对汇编有足够的驾驭能力,那你可以通过修改汇编代码来改变C/C++代码的走向。当然,学过汇编的都清楚,汇编比BrainFuck还难学,更不用说去反编译修改了。 但是Smali有一点不一样,就是它很简单,只有一点点的语法,只要你会java,了解Android的相关知识,那你完全可以通

PuddingGuo 8349

【jarvisoj刷题之旅】逆向题目[61dctf]stheasy的writeup

直接载入IDA 看有没有什么可疑字符串   双击进入 双击进入引用 F5反汇编成c代码 经过分析可以看出sub_8048630()这个方法是关键 双击进入 经过分析   再将一些难看的变量名什么的修改下 就变成下图这个样子 分析可知s就相当于我们想要得到的flag   反过来我们可以通过已经有的a和b这两个数组来得到flag           第一步:求a[...

iqiqiya的博客 1307

凸包算法详解

一些废话:写这篇博客是因为在听算法网课老师讲分治的时候提到过分治法求凸包的问题,当时没怎么听懂也没太在意这个(因为老师只是提了一嘴,没有细讲),结果好巧不巧,第二天力扣的每日一题就是凸包问题,题目在这:力扣 然后就想着好好学一下凸包算法,但因为我比较懒。。。立了计划后给这篇博客起了个头就没管了,直到几乎20天后,力扣的每日一题又又又有一题可以用凸包做,题目:力扣 所以我特意抽出一个下午好好看了一下各种凸包算法,写下了这篇博客。 注:一下算法均围绕力扣题目 587.安装栅栏 来讨论 前置知识: 设平

m0_54123999的博客 5137

JARVISOJ RE

JARVISOJ RE 今天来吧三道恶心的re写一下。。。 难度从自我感觉的简单到坑排序 爬楼梯 这题其实最“简单”hiahiahia 经过多次实验,其实只要手速过快,轻轻松松啊。 //电脑xps15触屏,更加轻松了23333 =.= evil exe 文件加壳了,直接脱壳,完事后拖入ida 从里面的许多256可以联想到rc4,具体加密过程也不复杂。 这边直接给代码了。 #include &...

皮三宝好菜的博客 656

(Jarvis OJ)(Re)stheasy

(Jarvis OJ)(Re)stheasy 丢到ida中反汇编找到main函数 找到关键的check()函数 程序的逻辑大概就是输入一个字符串,先判断长度,在和内置的数据进行对比,相等则return 1,内置数据的变化很简单。 找到.data段中定义的数据。 编写程序 1 #include&lt;stdio.h&gt; 2 int main(void){ 3 char...

Nothing 837
上一篇: (Jarvis Oj)(Re)Classical crackme
下一篇: (Jarvis Oj)(Re) DD-androideasy
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值