Tuber浏览器,酷鸟浏览器小号?

再次声明,本人没任何政治立场,即冷政,一切本着技术研究为目的展开。

看了标题,不知道你们还记得那个所谓合法的酷鸟浏览器,今天这个叫Tuber玩意又火了,没看过的话建议点击这里传送一下,也就1分钟就能了解完。

时隔一年,今年又蹦出来一款所谓合法的YouTube浏览器,话不多说开拆呗~

应用sha1:6f5965c8024d4d9ba8989c5bf041d6dd5f6533a7c0cb8d55b46ca80da01f455e
版本号1.0.81

我个人的习惯是直接看看目录结构和用的库,这个东西明显打包了webview库,但我很快就在\assets\acl\下发现了bypas[……]

查看文章

无聊的恐鬼症

好吧,我真的不想承认我胆子小,不敢玩这款游戏,我只是个无情的工具人,有人喊我我必来。
这篇算不上什么技术文,烂大街的,还在用mono运行时又不混淆源码的白给游戏的基础修改罢了。

坟头蹦迪(改人数)

游戏为了保证恐怖的气氛,最大只允许4人加入游戏,入手思路是直接找用的网络库,做Unity开发对Photon网络库应该不会陌生,这个库是第三方托管的,接入也比较无脑,感兴趣的话可以去官网下载一个sdk体验下什么叫3分钟搞定联机。
既然用了库,那就不要怪人家改东西了,Photon连接服务器的API:
PhotonNetwork.CreateRoom
在dnspy里面xref,会发现LobbyMana[……]

查看文章

LimeSdr dump1090 折腾小记

最近买了块limesdr开发板,废了点劲装好之后发现只能听听电台,估计是天线没搞好,后面少不了还要折腾,不过这板子是全双工的,大概以后也不影响自己发送自己接收,不过人生的一大乐趣在于折腾,手机折腾够了,该玩玩没玩过的东西了(x

这个频段是做什么的,估计看到这里的你已经不需要我额外的废话解释了,dump1090这个项目也比较老了,于是有了无数个fork,其中有人给limesdr做了适配:
https://github.com/Gluttton/dump1090/tree/limesdr

老规矩。

装好你的ubuntu16-18,安装官网驱动:
https://github.co[……]

查看文章

CPP琐记 04 类的空间布局

空类

class Empty{};

Empty empty;
auto *empty2 = new Empty();

std::cout << sizeof(empty) << std::endl;
std::cout << sizeof(*empty2) << std::endl;

输出sizeof的时候直接被编译器优化掉了,以及空类只有1个字节,显然创建对象必须要有一个最小的内存空间。

auto *empty2 = new Empty();
auto *empty3 = new Empty();

std::cout <&l[……]

查看文章

CPP琐记 03

杂记,后面会补充

lambda
[捕获列表] (参数列表) -> 返回值 {函数体}

如果lambda会生成一个匿名函数的话,并不难理解工作原理,但如果捕获列表中使用了一个局部变量会怎么样呢?

我们看最后一句
由于f是另外一个匿名函数,因此会被翻译成正常的函数call

通过ida反编译可见,i已经被提到了类成员变量上

彩蛋

我把我自己整乐了

[……]

查看文章

CPP琐记 02

没写完,一点点补全吧,包括前面的内容,不定期编辑,老样子,只写难点

容器

Vector,犹豫不决就用它,其实这玩意大概是个可变长的数组(我现在还没看过STL的源码)?看起来以后可以试着实现一下。
猜猜cpp书上说的,当没有默认构造函数的对象用作Vector初始化的情况会怎么样?

IDE语法提示正常, 编译时:
no appropriate default constructor available
不难理解为什么不能这样初始化,但书上的例子实在太抽象了。
实际上对应:

explicit vector( size_type count,
  &nb[……]

查看文章

CPP琐记 01

算是每天学习/加深的一个记录,尽量每天补充…

const相关

我以往对const的理解,除了常量以外,用在函数的参数里面可以防止被修改,但经常和指针放在一起就忘记了优先级有点蒙

const int *a;
int const *b;
// 均为指向int常量的指针

看啊,多么迷人的陷阱等着你跳,结合之后很明显他俩是一个东西……
其实真正有区别的是

int *const c; //指向int的常量指针
const int* const d; //指向一个int常量的常量指针

用在函数返回值里面可以达到更迷惑的效果,clang甚至会警告你。
const int func[……]

查看文章

突击CPP

现实中发生了一些事情,让我萌生了一定要突击掉CPP的执念。

按照以往的经验,学会一门语言的最好办法就是扔掉上一门语言,但到了CPP这尤为困难,仔细想想怎么都还是因为我对C#的熟悉程度,基本上什么都能用它写,就算不能,用到些底层的还可以用C,导致我CPP很多地方练不到,甚至对一些基础概念也很薄弱。

说多了都是借口吧,立flag也是不好的,希望个把月后,回来看这么一段话不会觉得自己打了自己一巴掌。。。

另外希望后面有机会一点点在刷点leetcode吧。。。

暂定的读书计划

《C++ Primer》

《Effective C++》

《深度探索C++对象模型》[……]

查看文章

Crash, Crash, Crash

最近开发项目碰到了个很神奇的野指针问题,在arm64下正常,armv7a下炸了,然而这个项目是从C代码移植过来的,ndk那边只做了层CPP的封装,配置gradle的时候,直接指定了外部cmake,因此没办法直接用android studio调试,至少我不知道有什么办法可以导入源码。

然后你看logcat,炸了就一条简单的Fatal signal X,真的是让人摸不到头脑,本来想挂lldb的,但实在懒癌,不过没办法,就搜了下buildin的lldb在哪里,结果被引导到了谷歌的调试页面:

https://developer.android.com/ndk/guides/debug

[……]

查看文章

认真你就输系列 – Arm间接寻址

我们都知道x86中的寻址相对于arm稍微简单一些,arm因无法直接操作内存地址,所以需要使用成对的ldr和str指令完成操作,因此,在操作一些常量或者字符串的时候,免不了要寻址,常见的教程版本大概是这样子讲的(摘抄):

汇编器编译后,反汇编看大概是长这样的:

乍一看没什么问题吧?ldr r0, [pc, #12],PC + 12的地址就是变量地址,那么我们找一个真实世界里面的例子,随便一个android arm的so文件好了,原因呢,是因为有人问我ida里面为什么用这种方式表示

说实话我也只是知道这里是把字符串加载进来,但从来没较真过这个问题,结果认真就输了,问[……]

查看文章