组件包含 更新检查器 以及 Texture图片导出
https://github.com/esterTion/unity-texture-toolkit
本文相关轮子: proto读取导出 | 定时任务本体 | 数据库对比主数据
A python + libil2cpp.so(Android) dumper:
Article: Generating Proto File For Banddream | DNARoma
因为上周的一个想法,写出了redive和cgss的master数据库diff库,还造了一波bundle解压的轮子
redive第三个号被制裁了,平稳科技流也开始查了
土豆的内容星月大佬写离线的时候已经表示过master不可行,都是登录时返回部分master,所以就可以放弃了
然后就是bang了,开搞前我还又去debug了一下,结果看到密钥瞬间才想起power之前给我说过
炸梦通信是protobuf,包括master和manifest也是,所以就必须要提取原始关系才行了。我刚开始还想尝试暴力提取数据,但是内结构和字符串都是wireType 2,没法区分
在之前我已经在Prefare博客上看到过说dump属性什么的,dnspy改了之后也没搞懂怎么看。后来在评论区看到回复才找到
Perfare:邦邦用的是protobuf-net不是Google.Protobuf,不需要.proto文件,你只需要找到带ProtoContractAttrbuit的类并还原出properties上ProtoMemberAttribute的值就可以序列化了
知道入口后就开始观察了,搜索了一波然后看到master数据的类是SuiteMasterGetResponse(基本上各种proto类都叫GetResponse)
瞎记录
1、博客的一些更新
服务器使用水萌大佬的机器也有三个月了,在刚开始的时候因为他们那边也是在不断调不断加东西,所以经常会爆炸,或者重启路由导致ddns ip改变。不过自从过年那次大爆炸之后一来,已经相当稳定运行了半个月了,可喜可贺,可喜可贺。
原始的vultr本来想着会被废置,不过我留下来当作自己的socks代理了(不是ss,纯socks5)不知道为什么好像比别人用的ss还稳,老见到他们说某某又墙了之类的,可能因为只有我一个人用吧(笑
SSL的话,本来我准备换le的野卡,结果还延期公开了。前两天稍微用 acme.sh 测试了一下可以csr同时生成两个域名的证书,爬丝的dnspod api我之前给他搞ddns ip自动更新的时候要过也可以用,到时候再帮他cron上
两周前更改了一下逻辑,之前设置仅在首页播放,因为没有可靠的跨tab通信确保不重复播放的方法。
然后想到了一个方法,用localStorage保存一个值,不存在的时候记录为当前页并自动播放,并设置关闭时删除值;存在且不是当前页的时候不自动播放,不过生成并显示播放器,点击的时候覆盖值并在关闭时删除值
这样就完成了一个简陋的单tab播放的逻辑
并不满与现在的顶端固定实现,最理想的是先跟随滚动,到底后固定,继续向下返回时跟随向上,到顶后再固定,这种感觉
写了个跟随scroll的之后发现很难看,去爬丝站上看了看实现发现是动态切换position,虽然美观一些但还是有瑕疵。最后采用了youtube式的侧栏,即独立滚动条
这一阵从土豆开始,到这次redive,逆向技能提升了不少
有了上次土豆的经验,这次一上来是准备抓网络的,结果死活进不去游戏,搞得我还以为梯子不够完备。第二天song跟我说这游戏检测root,然后我看了一眼发现他检测越狱,还是用objc检测的,笑死。flex用不了不清楚原因,随手theos编了个hook就进游戏了
先放上成品:esterTion/ReplayKitEverywhere BigBoss
这次搞的插件开始的时候算是很久之前了
最早的时候,在github里面找了一个实现了开始/停止的类,编译注入,然后用cycript调用。结果测试了一下质量过糟,就暂时放置了
然后就是放假后了,那一阵还在学校,因为实在是需要一个随时随地的录屏功能,所以把开始停止合并成一个函数,然后activator写了一个cycript注入调用的脚本,就这样凑活使用了
为了便捷录制,ReplayKitEverywhere简陋版搞定了
用了cycript和activator自定义命令
然后是前一阵我终于解决流量下使用pac代理的问题了
搜到的只有修改preferences.plist,但没等生效,重启就重置了
后来看到这个设置不是仅在重启时加载
然后就写了开机项,插到了cydia里(懒得再写LaunchDaemon了)
#ip1 interface 的 UUID 可能不同,但一个设备上是保持不变的 plutil -key NetworkServices -key "AEBF1975-384D-4121-98EB-1E3DFFB69191" -key Proxies -dict /var/preferences/SystemConfiguration/preferences.plist >/dev/null plutil -key NetworkServices -key "AEBF1975-384D-4121-98EB-1E3DFFB69191" -key Proxies -key ProxyAutoConfigEnable -int 1 /var/preferences/SystemConfiguration/preferences.plist >/dev/null plutil -key NetworkServices -key "AEBF1975-384D-4121-98EB-1E3DFFB69191" -key Proxies -key ProxyAutoConfigURLString -string "file:///var/cellular.pac" /var/preferences/SystemConfiguration/preferences.plist >/dev/null
于是我现在流量无缝google了,巨爽啊(
(促使我重新研究的主要原因是,l2tp疯狂被干扰,服务器443没问题,只有l2tp连不上,然后socks5虽然按理说都是明文,但就是贼稳定)
如果需要添加代理域名的情况,需要root下killall -9 CommCenter(联通每次弹的好烦啊
最后是今天搞了一整天mltd
因为搞好了流量代理,所以又想坑回这个辣鸡游戏了
结果打不开,才想起当时研究的时候就碰到过,这游戏不走代理,hosts都不认
改global-metadata.dat里的域名,进去之后突然又连不上了
然后搞一通抓包发现,title里GetVersion之后,域名竟然还原了!?
看来这个鬼地方写了服务器,要实现我的无墙土豆,只能搞密钥了
ida调试ios,整了一上午,竟然真的让我瞎翻翻到了
代理request,修改game_server,一气呵成,完美无墙麻辣土豆get
(资源cdn不是google家,所以不需要搞什么操作了,速度也挺快,美滋滋)
2017混结束了
是的,我自己感觉这一年就是混过来的
这一年里做了的比较大的项目
直播播放器都不能算大项目,说实在轮实用性比不上助手,毕竟我自己也仅仅是偶尔看直播
不过一年真的是能改变很多东西,去年这个时候,我还是选择停留在ff45,用着flash播放器;现在我则是停留在ff56,坚守legacy插件,flash则是几次重装系统之后就再也没有安装过了。明年这时候,谁知道呢,说不定我会离开火狐阵营?(苦笑)
反正就像上面说的,去年这个时候,我还并不看好,或者可以说完全不喜欢html5标准,所以起初做出来的播放扩展好像我自己都不用。
然后,随着火狐里的flash越来越难用,我终于是有一天转换了阵营,开始研究无flash。
flvjs魔改之旅,是从添加实时码率统计开始。
添加mp4的过程,模仿着现有的代码,功能完成了,也踩了不少坑,同样也获得了xqq的一些帮助,一些坑直到前不久才刚刚修复。总的而言,主体功能写了三天,难度也不算很高了。
紧跟着写完flvjs mp4之后,一想到写出这个功能之后,除了自己的play helper之外,就再也没有人用了,就感到心态爆炸,boom,然后脑热就写了这个扩展。
这么个产物至今都不算完美,bug依然很多,我无力处理,也懒于处理。
我用自己扩展的唯一机会:车祸视频,最近一个月也是再没继续看日更,毕竟天天的内容都是差不多的电摩横冲直撞,王者霸气转弯,确确实实容易感到厌倦。
这个项目可以说是充分体现了我的懒癌了
最早,power在5月份左右就提出了,想要转存全部番剧的想法,并且准备好了google教育账号。我当时以懒得开坑+考试,推迟到了假期。
考完试的那几天晚上,造了php多线程下载的轮子;
然后7月过去了,断断续续写代码,最后在8月初,才开始在几个无限流量服务器上开始跑任务;
由于写出来的代码是单队列,在那几个linux服务器跑起来效率很低,然后8月中旬的时候,power拿了代码,放到了一个win服务器里开始跑并发。
然后…一转眼就是10月了,期间我基本没想起过项目。一次提醒后我才去整理结果数据,然后重跑失败任务之类的。
等到初期任务跑完,已经又是一个月过去了。挂上了中转代理下载之后,我又写了写队列任务,算是正式开放了合并转存。
这个系统也是有几个坑没有填,重置任务状态,转移任务服务器(旧的要弃用,需要换)等等。
然后就是ac了
原本暑假有个写播放器的计划,但当时遇到了样式困难,写了半天就坑了。
原本想好的完美简介是“一个B站播放器,送个缺B乐的各位”。但是坑计划之后我加上了yt主题并设为了默认,也是不准确宣传了(笑
说来奇妙,我完全不用ac,也不知道写这为了啥;即使如今写好了,也仅关注了一个steam周报。
虽然完成后确实得到了一些支持,也确实有真切的希望扩展能更好更完美的人。
写代码的破事说完了,再说说生活吧。
回到开头,这一年是混过来的
现在处在一个重大抉择的时候,大三了,需要决定自己的方向了。
家里人希望,或者说是要求我考研。本科录取没能进计算机,被调剂到了物理,现在要考当然是希望考进计算机,但心态上始终有着很大问题。
提不起学习动力。
两年多大学,整个人越过越颓废,学业越来越吃力(不如说是没有使劲)。
自己逐渐被懒惰的动物本性拖住,不知如何才能找回高三时的那种冲劲。
也许这就是进入大学前,一直听到别人说,也一直嗤之以鼻的,缺乏目标的现象吧。一直觉得自己不会是那样的,我可是有目标的人;到头来却发现,自己并没有那么特殊。
也或许是看到认识的人都是一种,算是活得风生水起,从而对自己方向感到的一种困惑吧。
这个学期考了两个外语考试,N2和托福,N2出成绩还有一个月,考完看答案估计自己要么擦线过,要么刚好在线下;托福则是考了86,半裸考,不算低,也不算高,考出来什么用都没有的分数。专业课考试也是持续走低,补上一个又挂一个。
如果你看到这里了,很抱歉让你看到了一堆牢骚话。
这么个总结,写出来或许仅仅是用来发泄而已。
每一学期开始都希望自己能真正的付出足够努力,却总是在结束时发现,只是又混过了一段日子。
12/31 2017
昨天WonderParade把Ocean Adventure全部WFC了,然后想到录屏的时候,想起之前研究过的Quicktime录屏,在想能不能设备上录制
google之后搜到了ReplayKit,看起来非常简单的样子
最初尝试直接cycript执行,载入Framework之后虽然可以调用到开始和停止录制,但是因为cycript里的函数不是objc的方法,所以没办法搞回调
于是找了示例项目,粗略编了一个MS插件,作用仅仅就是声明一个ReplayKitObj类,代替调用开始/停止录制
毕竟也不熟练,怼了一阵搞出来一个能工作的版本,但是真正搞出来之后发现,ReplayKit录制质量特别渣……
基本上来讲,qt录制质量是100的话,airplay录制大概是85,rk就是60-70的样子…而且音频只录制了一个声道,这是最骚的
// // ReplayKitObj.mm // ReplayKitObj // // Created by ester on 2017/12/12. // Copyright (c) 2017年 __MyCompanyName__. All rights reserved. // // CaptainHook by Ryan Petrich // see https://github.com/rpetrich/CaptainHook/ #if TARGET_OS_SIMULATOR #error Do not support the simulator, please use the real iPhone Device. #endif #import <Foundation/Foundation.h> // Objective-C runtime hooking using CaptainHook: // 1. declare class using CHDeclareClass() // 2. load class using CHLoadClass() or CHLoadLateClass() in CHConstructor // 3. hook method using CHOptimizedMethod() // 4. register hook using CHHook() in CHConstructor // 5. (optionally) call old method using CHSuper() #import <ReplayKit/ReplayKit.h> @interface ReplayKitObj : UIViewController //@interface ReplayKitObj : NSObject<RPPreviewViewControllerDelegate, RPScreenRecorderDelegate> //@interface ReplayKitObj : UIViewController<RPPreviewViewControllerDelegate, RPScreenRecorderDelegate> //-(void)startRec; //-(void)stopRec; //- (void)previewControllerDidFinish; @end //@interface ReplayKitObj () <RPPreviewViewControllerDelegate> //@end @implementation ReplayKitObj +(void)startRec{ NSLog(@"enter"); //UIViewController* rootController = [UIApplication sharedApplication].keyWindow.rootViewController; RPScreenRecorder* recorder = RPScreenRecorder.sharedRecorder; [recorder startRecordingWithMicrophoneEnabled:false handler:^(NSError * error) { if(error != nil) { NSString* desc = error.description; NSLog(@"%@", desc); return; } }]; } +(void)stopRec{ NSLog(@"enter"); [[RPScreenRecorder sharedRecorder] stopRecordingWithHandler:^(RPPreviewViewController * _Nullable previewViewController, NSError * _Nullable error){ NSLog(@"EEEEE"); if(error){ NSLog(@"fialed to stop recording, %@", error); }else if(previewViewController != nil){ NSLog(@"finish"); previewViewController.previewControllerDelegate = self; UIViewController *rootController = [UIApplication sharedApplication].keyWindow.rootViewController; [rootController presentViewController:previewViewController animated:YES completion:nil]; } }]; NSLog(@"end"); } +(void)previewControllerDidFinish:(RPPreviewViewController *)previewController { NSLog(@"previewControllerDidFinish"); [[UIApplication sharedApplication].keyWindow.rootViewController dismissViewControllerAnimated:YES completion:nil]; } +(void)previewController:(RPPreviewViewController *)previewController didFinishWithActivityTypes:(NSSet <NSString *>*)activityTypes { NSLog(@"activity - %@",activityTypes); } @end
总之,本来还在想要不要开发一个完整插件出来,但这么差的录制质量,还是算了