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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
接下来随便处理就行
我就不继续下去了,也快花了我整三天时间
这些我会发给 @drakeet 方便他处理其他问题 23333333(
This media is not supported in your browser
VIEW IN TELEGRAM
工程列表:
#reveng 相关
修改 AXMLEditor
修改 AndBug
自己写一 纯 Java AXML ser/deser 库
自己写一款纯 Kotlin 的 JDWP 库 (可能需要一段时间) (无疑的)
demangler 反混淆工具

#PL 相关
KtLime, 可能又放到
详细信息可以在 github 上项目页找到

#geekapk
GeekApk, 有可能完成最上面两个就会开始
刚才听歌的时候发现了一些不错的歌声合成引擎
http://www.sharpkey.net/
http://www.ai-muta.com/

做得不错, 开源与否我大概不清楚(90% 不开源, 且只支持 Windows)
如果好用的话, 这些还没出道的虚拟歌手创建亚种非常适合给 GeekApk 娘配音 😄
This media is not supported in your browser
VIEW IN TELEGRAM
不过国产不国产我看来不重要(这么说 AndResGuard 也是国产的😂
开源与否才是最重要的
muta 号称是支持歌声情感参数合成的, 不过我不清楚音源制作如何如何
MUTA 计划的是比较全的, 歌声合成只是一个小部分
http://www.ai-muta.com/app.html
还做了一个养成类游戏, 其中也包含了歌声合成功能
题外:这网站前端在我这看真是不行
Sharpkey 是个人开发缘故更简洁一些, 可能只有一个官方音源和一个编辑器
SharpKey 的编辑器 rar 只有 1.4 MiB 大小, 可以说是非常小巧了
 boxstar Sharpkey的开发者
boxstar:不会调教的程序员不是好歌手


rt, 是个人开发
不过我之前看了他发的那个出道曲, 感觉还是不够, 曲子/填词和 pv 都是(没有考虑歌声合成质量)
https://weibo.com/u/2652061783
boxstar 的微博
可能没有 github/gitlab/coding/oschina 之类的
没有提到任何和开放源代码相关事情 ((((
估计作者是不会多花费时间去做 Linux 版了,
某些库应该还是可以跨平台编译的(也或许不能)
(1)任何意见建议、bug反馈、都欢迎私信联系
demangler 实际上是为了解决 proguard 对类移动/更名的操作带来的麻烦
现在的 Java/Kotlin 应用会使用各种类库, 这些类库大部分都是开源的, 且受到版本控制 可以随意获取任意时段的代码

-repackageclasses

-repackageclasses 这条规则配置特别强大,它可以把你的代码以及所使用到的各种第三方库代码统统移动到同一个包下,可能有人知道这条配置,但仅仅知道它还不能发挥它最大的作用,默认情况下,你只要在 rules 文件中写上 -repackageclasses 这一行代码就可以了,它会把上述的代码文件都移动到根包目录下,即在 / 包之下,这样当有人反编译了你的 APK,将会在根包之下看到 成千上万 的类文件并列着,

(from drakeet.me)

Proguard 有这种功能, 可以将类随意操作 更名/移动, 变更方法的名字, 以此提升逆向工程的工程量
但是有一点是不变的 — 类的 超类(递归判断类是否相等), 字段数目, 类型, 初始值, flag, 方法数目, 除了方法名外的标识符, 方法逻辑(同样递归判断变量类型) 等行为数据
不管 Proguard 怎么混淆都没法改变,
Proguard 可以把下面这个类改成更不容易辨识的格式, 但他们在行为上是等价的:

package org.example

class Animal {
String name;

Animal(String name) { this.name = name; }
Animal() { this.name = "foo"; }
String getName() { return this.name; }
void setName(String val) { this.name = val; }
}

class Duck extends Animal {
Duck() { super("duck"); }
void quack() { System.out.println("quack!"); }
}


我们在外面使用这个类库

// snip
import org.example.Duck;

public void main(String[] args) {
Duck swissie = new Duck();
swissie.quack(); // quack!
}


但是在使用 Proguard 混淆后, 他们会变成这样(使用混淆字典还可以有更骚的操作 XD):

package wwwwwwwwWwWww

class Qaaaq { // 现在是 LwwwwwwwwWwWww/Qaaaq
String sasa;

Qaaaq(String dsdsdsds) { this.sasa = dsdsdsds; }
Qaaaq() { this.sasa = "foo"; }
String emmmmmm() { return this.sasa; }
void emmm(String val) { this.sasa = val; }
}

class EWsespdcs extends Qaaaq {
EWsespdcs() { super("duck"); }
void Ensure() { System.out.println("quack!"); } // 如果使用了类似「代理方法」来混淆这个语句,那就可以用 simplify 反混淆, demangler 不是做这种事情的
}

// snip
import wwwwwwwwWwWww.EWsespdcs;

public void main(String[] args) {
EWsespdcs swissie = new EWsespdcs();
swissie.Ensure(); // quack!
}


假设你有 Animal 类的源代码, demangler 会帮你锁定被替换标识符/移动位置 的 Animal 类, 并把它移动回去, 更新代码中的引用
这一切都以 Smali AST 为基础操作(不是所有 DEX 都可以 dex2jar, 但几乎 100% 能被 Dalvik 加载的 DEX 都至少经过少量处理后可以 baksmali)
deobfs 完后的代码看起来是这样的:

package org.example

class Animal { // 现在是 Lorg/example/Animal
String name;

Animal(String name) { this.name = name; }
Animal() { this.name = "foo"; }
String getName() { return this.name; }
void setName(String val) { this.name = val; }
}

package wwwwwwwwWwWww

class EWsespdcs extends Animal {
EWsespdcs() { super("duck"); }
void Ensure() { System.out.println("quack!"); }
}

// snip
import wwwwwwwwWwWww.EWsespdcs;

public void main(String[] args) {
EWsespdcs swissie = new EWsespdcs();
swissie.Ensure(); // quack!
}


在软件不同版本重新混淆时保持逆向工程进度也有帮助 (重混淆时即使类没有修改其标识符/位置也会变化 但 demangler 可以检测到行为数据完全相同的类并自动反混淆)