源码级调试 App Store 包
有些时候我们会遇到 Release 包有 Bug,Debug 包正常,或者是本地构建没问题,上传到 App Store 或者 TestFlight 版本就有 Bug。 能有个方式调试一下就好了。 这个可以有,解决的方式也很简单,我主要的灵感来自 MonkeyDev。如果你用过 MonkeyDev,会感觉使用这个工具逆向非常方便,我们可以直接在 Xcode 上像普通的 App 一样构建调试。 这个思路也可以用在我们调试一些“不能调试”的 ipa。 所以我们先来看一看,MonkeyDev 是如何将已经构建好的 ipa 直接放到 Xcode 运行起来的。 # 借助 Xcode 重签名运行 App 事实上这一过程很简单,基本上我们直接将原本构建的流程改成直接将从 ipa 解压的 app 拷贝过去即可。 为了了解 ..
更多TLS-Poison 攻击方式在 CTF 中的利用实践
最近总结整理了 TLS Poison 攻击相关的知识,本文会继续讲 TLS Poison 利用,以及其在 CTF 的实际运用,也通过这个题目来聊聊 FTPS 相关知识。文章首发于长亭安全课堂:TLS-Poison 攻击方式在真实CTF赛题中的利用实践 https://mp.weixin.qq.com/s/ZziSf69AOyXoI0IgC0UyUQPS: 在阅读本文之前,建议您掌握相关的 TLS Poison 先验知识,本文不会再重新详细介绍 TLS Poison 攻击的基础知识我们首先再来回顾 Black Hat 这个议题,为什么作者使用的是 When TLS Hacks You 呢?而不是 When HTTPS Hack You ,说明这个问题是出现在 TLS 特性身上,所以目前我们貌似都更多只局限地..
更多ElasticSearch检索的核心-倒排索引解读
前言ElasticSearch为什么适合做检索服务器? 因为快啊,大佬! 为什么快啊? 因为倒排索引啊! 什么是倒排索引? 这个,就要细细分析一下了,这篇文章可能写的不是那么全,但是我也会尽量总结所有重点!希望能帮到大家,爱你们! 索引是什么?首先,从基础玩起来,倒排索引,分为倒排+索引 索引这个词汇,在数据库的出镜率非常高,我基础比较差,所以,我在这里会从头进行学习解读,希望大家理解,如果对索引非常了解的兄弟,请直接跳过这一段 首先,什么是索引。 索引是一种特殊的数据库数据结构 首先,一般我们认为的查找,就是从头检索到尾,也就是从开头遍历到结尾,这样的时间复杂度是O(n) 索引,就是将数据库表中的某一列或几列以特定的数据结构存起来,比如B-Tre..
更多为什么要使用消息队列服务
消息队列是什么?化繁为简一下,分拆一下这个词汇,首先,先来看队列(queue) 队列是一种常用的数据结构,特点是先进先出 消息队列,顾名思义一下,就是把消息放在队列当中进行处理 这个消息,肯定是等待处理的消息,我们应该要获取消息做什么事 比如获取一个返回结果,接受一个参数等等。 所以这里引出了新的概念,消费者和生产者 生产者就是往队列里面塞数据 消费者就是往队列里面取数据 这就是消息队列的基础概念。 消息队列解决了什么问题按理说,消息队列只是一个队列类数据结构,这个我们完全可以自己实现 例如Python的队列queue,或者java的Deque都可以实现队列的功能 再去实现一个消费者/生产者逻辑就好了,那为什么要用消息队列呢? 这边举几个我开发中遇..
更多LLVM Link Time Optimization
链接时优化(Link Time Optimization,简称 LTO)已经在 WWDC 2016 中提及到。因为这个选项在 Xcode 中默认关闭的,我也一直没有开启过这个选项,所以之前没有做过什么了解。趁着这次五一放个假,我们可以看看 LTO 是什么,以及它的整个流程是什么样子。 我们知道一个程序从源码到运行,需要有一个静态链接的过程。 在这个过程中,在解决所有的符号引用关系期间,我们可以知道整个程序的全貌。为此我们能以全局的角度做一些优化,这就是链接时优化。 我在这里将 LTO 理解为:借助静态链接可以获取程序全局信息的机会,做一些全局优化,这样可以提高运行时的性能,并进一步减少二进制的大小。 阅读本文前,建议先看完 LLVM Link Time Optimization: Design and I..
更多弄懂难缠的DFS算法和相关变种(Python实现)
前言这次不废话,直接接上次的BFS,直接来看DFS。 什么是DFS算法DFS,全名深度优先搜索 用大白话来说,其实就是 一条路走到黑,走不通再回来,直到无路可走 举个简单的例子,现在我们有一个树,就像下面这样 12345 A / \ B C / \ / \D E F G 假设我们要用DFS算法来进行遍历/搜索 它的步骤如下 从初始节点A出发,并且将A标记为已访问 查找A的一个临接顶点B。 如果B存在,继续执行访问,否则回退到上一步,继续查找临接顶点 将B标记为可访问,继续执行查找临界点D的操作 重复操作,直到所有的值都访问完了,无值可以访问为止。 那么,遍历树的顺序应该是 A -> B -> ..
更多如何简单地在vue3中实现i18n
闲扯 vue3出来好一段时间了,我一直也没怎么用,因为公司项目一开始用的vue2。迫于前端太卷,要时刻学习,跟进时代,最近着手用vue3+vite写一个练手项目。先不透露项目是啥,后面会开源的。 刚开始写vue3时也是处处不顺,因为思维还停留在vue2上,慢慢习惯了也还不错。个人感觉vue3学习了React的优点,把响应式这块完全丢给用户了。 习惯了vue全家桶一把梭,且没写过React的人可能有点适应不过来。 简介 不用第三方i18n是因为我觉得i18n应该是一个很简单的,自己实现的功能 目标: 更改语言后,所有的$i18n()均要同步更改 <template> <span>{{ $i18n('articles') }}</span> </templat..
更多学习抽象语法树 AST
作为一个前端切图仔,工作中少不了用上 Babel,ESLint,Prettier 这些工具,但是这些工具背后的工作原理却不求甚解😅 前言作为一个前端切图仔,工作中少不了用上 Babel,ESLint,Prettier 这些工具,但是这些工具背后的工作原理却不求甚解😅 ,最近才尝试去了解一番,没想到发现一个全新的世界,那就是 AST 中文名抽象语法树。初识在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法架构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真是语法中出现的每个细节。比如嵌套括号被隐含在树的结构中,并没有以节点..
更多canal简单使用
在使用大数据进行数据计算的时候,首先我们需要获取到数据。如果是从MySQL获取数据的话,可以选择阿里的开源组件canal,它将自己伪装成MySQL的slave来接收数据。开启MySQL的binlog设置首先我们查看MySQL是否打开了binlog复制的功能mysql> show variables like 'log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_bin | OFF |+---------------+-------+1 row in set (0.00 sec)如果没有打开,就编辑MySQL的配置文件/etc/my.cnf,添加如下配置# b..
更多一篇文章带你读懂 TLS Poison 攻击
这是《一篇文章带你读懂 XXX 攻击》系列的第二篇文章,本篇文章主要讲述 TLS Poison 攻击对应的三种攻击方式、一些可能算是“新”的 DNS Rebinding 技巧以及一些关于 IP 选择探索等内容。[TOC]文章首发于雷神众测,以下为首发地址链接:一篇文章带你读懂 TLS Poison 攻击(一)一篇文章带你读懂 TLS Poison 攻击(二)一篇文章带你读懂 TLS Poison 攻击(三)一篇文章带你读懂 TLS Poison 攻击(四)Preface使用《一篇文章带你读懂 XXX 攻击》的标题是为了督促自己把一个攻击的尽可能多的细节尽可能的搞懂,也是为了提升自己的写作以及表述水平。本文旨在帮助大家了解学习 TLS Poison 攻击,希望通过一篇文章让大家读懂 TLS Poison 攻..
更多