1.git提交代码: cd 进到clone 目录下面, git pull , git add 加上某目录 , git commit -m "..." , git push origin master
2.linux远程登录某机器:ssh root@10.0.0.59, root@10.0.0.59:/root/ostagram/public, scp复制文件
3.在ida找地址:调出String window查找字符串
4.cppFlags.addAll(["-O3", "-fvisibility=hidden"]) ----- so混淆
isGooglePlayServicesAvailable ---- 免google更改返回值 , data段也可以hook
5.插件制作注意: 先打印对象的内存数据如前50个,2.加血时可以找dead函数,然后观察哪个数据变0了,然后自己手加上。
6. 过签名校验: v0 = ((Context)this).getPackageManager().getPackageInfo(((Context)this).getPackageName(), 64).signatures[0].toCharsString();
7. U3D取对象值: int goldfiled;
DataSet.getFieldValue("gold",&goldfiled,dataSet); //方式1取对象数据
//LogD("<%s> gold:%d",__FUNCTION__,goldfiled);
goldfiled+=1000;
void *gold=DataSet.getFieldBoxedValue(domain,"gold",dataSet); //方式2取对象数据
int a=*(int *)mono_object_unbox(gold);
LogD("<%s> gold:%d",__FUNCTION__,a);
DataSet.setFieldValue(domain,"gold", &goldfiled, dataSet);
//方法调用
void *currentMana = PlayerModel.getFieldBoxedValue(domain, "currentMana", obj);
float a = *(float *) il2cpp_object_unbox(currentMana);
//LogD("<%s> currentMana -- %f", __FUNCTION__, a);
if (a < 500) {
a = a + 100;
arg1[0] = &a;
PlayerModel.invokeMethod("SetCurrentMana", arg1, obj);
}
8. Thumb汇编占两个字节,hook时地址-1,而arm汇编不需要
9.去广告,可以关闭网络. U3D广告:function=ShowADView, className:IAPCNManager
BannerView --- show
10.得到沙盒的重定向路径:getTargetApplication().getExternalCacheDir().getParent()
11. Xposed 是hook不到native层反射调的java层的函数,因此是打不出log的。
12.doInBackground()未及时执行,也就是它并没有在execute()调用之后马上执行,而是等待了很久才得以执行。
因为是4.0平台,所以所有 的AsyncTask并不都会运行在单独的线程中,而是被SERIAL_EXECUTOR顺序的使用线程执行。因为我的应用中还有其他地方使用 AsyncTask,所以到网络取图片的AsyncTask也许会等待到其他任务都完成时才得以执行而不是调用executor()之后马上执行。
解决方法:要么直接使用Thread,要么创建一个单独的线程池 (Executors.newCachedThreadPool())。或者最简单的解法就是使用 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR),这样起码不用等到前面的都结束了再执行。
//new InitAsyncTask().execute();
new InitAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); //立即执行
13. cocos2d: 记录一下http的请求void HelloWorld::onHttpRequestCompleted, --- fiddler 能够拦截修改请求的结果
14. fiddler Android下https抓包全攻略
15.获取c不定参数:
va_list valist;
va_start(valist, a2);
//LogD("<%s> a2 %s , num:%d", __FUNCTION__, a2,num);
int c;
if(a2[j]=='s'){
c=(int)va_arg(valist, char *);
LogD("<%s> a2 %s , num:%d, data:%s", __FUNCTION__, a2,num,c);
}else{
c = va_arg(valist, int); //作为下一个参数类型的参数类型,返回不定参数
// if(c==testCoin){
LogD("<%s> a2 %s , num:%d, c:%d -- lr:%x, mybaseAdd:%x", __FUNCTION__, a2,num, c,lr-mybaseAdd, mybaseAdd);
// }
}