duangsuse::Echo
719 subscribers
4.27K photos
130 videos
583 files
6.49K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from duangsuse Throws
#Docker #learn #blog 这里我快速的给还没有看的大家写一个快速知识获取笔记(就是我之前偶尔写的阅读笔记):

+ Trumeet 这么做是为了让 Docker 构建(like CI Build)程序(like Java/Gradle)时更省内存资源和减小 Docker 镜像大小

»» 优化前

FROM openjdk:8u171-jdk-alpine3.8

ADD . /app
WORKDIR /app

RUN apk add maven \
&& mvn clean package \
&& apk del maven \
&& mv target/final.jar / \
&& cd / \
&& rm -rf /app \
&& rm -rf /root/.m2

ENTRYPOINT java -jar /final.jar

»» 优化后
FROM openjdk:8u171-jdk-alpine3.8 as builder

ADD . /app
WORKDIR /app

RUN apk add maven \
&& mvn clean package \
&& apk del maven \
&& mv target/final.jar /
# 删了后面几条 rm -rf 命令

FROM openjdk:8u181-jre-alpine3.8
as environment
WORKDIR /
COPY --from=builder /final.jar .
ENTRYPOINT java -jar /final.jar

我们总结一下,就是把 JRE 和 JDK 分开,首先 JDK builder 生成 JAR 文件,然后 COPY --from=builder /final.jar . 拷贝 artifacts 到 runtime 环境,然后 entrypoint 执行 java -jar final.jar


+ 多阶段构建是 Docker 17.05 的新增功能,它可以在一个 Dockerfile 中使用多个 FROM 语句,以创建多个 Stages
+ 每个阶段间独立,使用 COPY --from <stage> <dst> 来获取其它阶段的文件


Trumeet 的意思就是,分阶段『构建、运行』可以省内存和镜像大小,原理就是首先『做菜』

需要锅(构建工具链)、调料(构建配置)、菜(源代码)什么的

然后上菜(COPY 复制 JAR 包部署),这时锅什么的都不需要了,只存在『享用』菜品的开销,它把『做菜并品尝』的系统资源平摊到『做菜』和『品尝』两个部分,各有各的环境和需要的器材,可以达到省体积和内存的效果

+ docker build --target build1 . 是可以用的,猜猜它做什么
+ COPY --from=0 /demo/hi-1.txt /demo 也是可以用的,猜猜 0 和使用名字的版本有什么区别
+ docker save <tag> > docker.tar 猜猜是做什么 // 重新构建并保存(Save)
r2-debug-data.md
10.7 KB
#learn #reveng #backend 之前说的那个教程
duangsuse::Echo
r2-debug-data.md
This media is not supported in your browser
VIEW IN TELEGRAM
#learn https://gist.github.com/duangsuse/5ca62db55f06d4d97d72729d11a3e6d3#file-r2-debug-data-md 好耶!

呃,其实因为我开始功课做得有点不足,然后就有点错漏,包括 x86 和 x86_64 的调用约定差别我没注意到,死认为参数必须靠栈传递了,导致教程写错
最后一段其实也有错误,不过不管哪里有错,希望大家能接受。

那么这教的大概就是一些基本的 native 动态分析技能,如此。在 x86 上有点区别,不过更简单一些了应该(x86 上参数基本都是栈上分配,不是按通用寄存器传递)

简化嘛... 比较难,因为我懒了而且都是干货,底层的事情不是几个接口定义就完成的,而且这写了两个小时了...
Forwarded from dnaugsuz
这个教程教了如何 hack 下面这一小段程序,虽然有些纰漏,喜欢学习的同学们欢迎过目(

+ 动态修改 main() 的参数 argc 和返回值
+ 找到指针 str 指向地址,并且覆写堆数据

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static char *msg = "duangsuse 菜鸡\n";

int main(int argc, const char **argv) {
char *str = malloc(sizeof(msg)); strcpy(str, msg);

if (argc > 1) printf(str);

return -1;
}
Forwarded from duangsuse Throws
#statement #PL #tech #Android #dev 你们知不知道为什么我很喜欢说我『幼稚』? 🤔

首先,有些大佬就是非常喜欢说自己『幼稚』,可能他们也和我有一样的遭遇吧(笑)
『我怕被垃圾骚扰』 — 看,多直白,我都从来不说如此丧气的话,然而,现在在学高级类型和静态分析理论的不是这个会尊重别人的我(笑)
垃圾是什么? — 不知道自己不知道的人

幼稚,这是曾经某个 Android 开发者(which 现在在巨硬 M$ 工作,当然这个他自己说的,不需要经过允许)对我的评价(之前的某件不愉快的事)
所以我想我永远都是幼稚的,感谢他的祝福,Stay hungry, stay foolish.
真正的保持饥饿、保持愚蠢,从此不要再毫无执行能力,不要再被接口,再被一个表面积蒙住双眼
是时候让理想变成现实了
有了技术,方可实现计划
我会永远保持幼稚和愚蠢 — 对我看我自己来说,以便孜孜不倦地学习到新知识,提升各方面自己的认知层次,或许

没错,可能就是这样吧,如果自己想学的更『不同于常人』一些,就要接受别人不一样的眼光,或许有鼓励、或许有批判
但一定要坚持走下去,坚持追根究底的学习态度

我的目光从来不应该停留在理解接口定义和接口文档的层次上,无论是 Web 开发、桌面和移动应用开发、嵌入式还是程序设计语言理论

我不想在诸如 Vim/Emacs(吐槽,你们这些争论他们好坏的,真的用他们吗?你们知道啥是 Emacs Lisp 啥是 VimScript 吗?)意识形态之争
和板凳条凳(参考鲁迅《阿 Q 正传》),名字叫函数式还是面向函数的问题上纠结

有些争论是没有太大意义的,技术上真正深度的变迁,从一个普通的用户、到系统管理员、到开发者、再到开发者所依赖的开发者

从只会使用应用程序,到只会理解代码、抄改代码,到真正理解并且会编写代码,到看透代码和各种理念背后的东西
我要一步一步走上去,我想这就是我的路,我『不喜欢』的数学阻止不了我,如果我需要数学,我就会喜欢它

但如果有一天 duangsuse 真的能赶上巨佬们的步伐,duangsuse 要真心为想学习的人考虑,好好的回答,永远不去扭曲别人
希望真能这样吧,,,
Forwarded from dnaugsuz
还好我起码是个 UNIX-Like 幼稚系统管理员,并且有 Arch LiveCD 的 U 盘在旁边...
duangsuse::Echo pinned «#statement #PL #tech #Android #dev 你们知不知道为什么我很喜欢说我『幼稚』? 🤔 首先,有些大佬就是非常喜欢说自己『幼稚』,可能他们也和我有一样的遭遇吧(笑) 『我怕被垃圾骚扰』 — 看,多直白,我都从来不说如此丧气的话,然而,现在在学高级类型和静态分析理论的不是这个会尊重别人的我(笑) 垃圾是什么? — 不知道自己不知道的人 幼稚,这是曾经某个 Android 开发者(which 现在在巨硬 M$ 工作,当然这个他自己说的,不需要经过允许)对我的评价(之前的某件不愉快的事)…»
duangsuse::Echo
#learn https://gist.github.com/duangsuse/5ca62db55f06d4d97d72729d11a3e6d3#file-r2-debug-data-md 好耶! 呃,其实因为我开始功课做得有点不足,然后就有点错漏,包括 x86 和 x86_64 的调用约定差别我没注意到,死认为参数必须靠栈传递了,导致教程写错 最后一段其实也有错误,不过不管哪里有错,希望大家能接受。 那么这教的大概就是一些基本的 native 动态分析技能,如此。在 x86 上有点区别,不过更简单一些了应该(x86…
那么既然看了这个显然就是有基本的对『黑盒』的动态分析能力了

恭喜你,你又打破了一个黑盒。
很多人终身都无法理解的,深邃黑暗
当然也是很多人认为『几乎没有办法』分析的东西
👆 是针对只会用被人包装好即拆即用的反编译器的前端来说

下一步可能是学习如何写 SIMD 平台指令(比如 AVX、SSE、NEON,跑
(讲道理,如果不知道如何在 C 里面 asm 内联汇编,学这些也没太大用,所以可以先了解 GCC 的 Assembly I/O Templating 机制(跑

我呢,下面说 Android 平台上的... 原生机器代码调试

因为 Radare 2 实际上支持 Dalvik 的字节码格式,换句话说如果没有 Smali 之类的字节码工具,单上 r2 也可以完全胜任分析任务
而且分析功能还会更为强大,因为 Radare 2 本身就是为逆向分析而生的

至于 Dalvik 平台的动态分析可以用 Python 工具 Andbug,本频道之前也有讲使用 Andbug 对混淆后 classes 的动态分析(寻找反修改逻辑)
即便原作者使用 Proguard 将绝大部分的『名字』都替换为无意义的东西甚至使用了重打包(尽可能将无关类移动到根节点上,藏叶于林,使手工静态分析几乎不可能完成)
动态分析简单打下几个断点,然后让应用正常执行在两个小时内可以找到相关逻辑的位置,体现了动态分析『抓重点』的强大性能
#life 这周最后的任务,发一下 Android x86 radare2 debug 酷安应用原生 liba.so 的过程

然后就是简单年度总结一下吧... 虽然的确很难完全
Forwarded from Quinn Chen
Quinn Chen:
http://quinnchen.me/2018/09/13/2018-09-13-asm-transform/
分享一篇刚写完的博客
... 所以啊,就猜到是 Sketch 画的,4WH27ZUYV7X3ZDHEXSNOPFF34S4KVZM3X3X3ZDHFWCY6LPUI4WHITZNOWPSLTCBOFYXAU===(并非针对这件事,只是感叹一些无需考虑的之前的细节什么的)
Forwarded from dnaugsuz
好评
Forwarded from dnaugsuz
图画得很好
Quinn Chen
Quinn Chen: http://quinnchen.me/2018/09/13/2018-09-13-asm-transform/ 分享一篇刚写完的博客
这个博文写的真的很好,临时看了一下,实在是不错,作者是 Hunter Java AOP 框架的作者
推荐大家阅读,因为干货实在是很多所以暂时就不会写笔记,或许以后有时间了再读下