YYHD-工作中一些总结(3)

来源:互联网 发布:淘宝优惠券推广图片 编辑:程序博客网 时间:2024/05/29 12:20

1. 游戏中常用的词:

金币,钱:Cash、PremiumCurrency、Gold, money

无CD: Cooldown

2. Git pull 强制覆盖本地文件 
git fetch --all  
git reset --hard origin/master 
git pull

3. dump:   Il2cppReflection::dumpClassFromObj((Il2CppObject*)attribute);

4.在lua中..是字符串连接操作符

5.装包:arg1[2] =mono_string_new_wrapper(cmd.data);

6. Android根据图片文件名获取它的资源ID 的两种方式 :
方式1:
     public int  getResource(String imageName){  
    Context ctx=getBaseContext();  
    int resId = getResources().getIdentifier(imageName, "drawable" , ctx.getPackageName());  
    return resId;  
}

方式2:
 public int getResourceByReflect(String imageName){  
    Class drawable  =  R.drawable.class;  
       Field field = null;  
       int r_id ;  
       try {  
           field = drawable.getField(imageName);  
           r_id = field.getInt(field.getName());  
       } catch (Exception e) {  
        r_id=R.drawable.b_nothing;  
           Log.e("ERROR", "PICTURE NOT FOUND!");  
       }  
       return r_id;  
}  

checkbox事件:

viewHolder.cb.setOnClickListener(new CompoundButton.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (commodityInfo.isOwned()) {
            boolean flag = commodityInfo.isOpen();
            if (flag == true) {
                viewHolder.cb.setChecked(true);
                NativeUtils.nativeProcessCheat(commodityInfo.getNativeId(), 0,   1);
                commodityInfo.setOpen(false);
            }else{
                viewHolder.cb.setChecked(false);
                NativeUtils.nativeProcessCheat(commodityInfo.getNativeId(), 0,   0);
                commodityInfo.setOpen(true);
            }
        } else {
            viewHolder.cb.setChecked(false);
            commodityInfo.setOpen(false);
            GoodsManager.Buy(commodityInfo.getCommodityId());
        }
    }
});

6.U3D解密dll_dump

char * GetFilename(const char* fullpathname){char* save_name, *pos;int name_len;name_len = strlen(fullpathname);pos = (char *) (fullpathname + name_len);while(*pos != '/' && pos != fullpathname)pos --;if(pos == fullpathname){save_name = (char *) (fullpathname + 1);//LogD("<%s> filename=%s", __FUNCTION__, save_name);return save_name;}name_len = name_len-(pos-fullpathname);save_name = (char*) malloc(name_len+1);memcpy(save_name,pos+1,name_len);//LogD("<%s> filename=%s", __FUNCTION__, save_name);return save_name;}int dumpMonoImage(void * monoImage){int img = (int) monoImage;if(!img){return 1;}LogD("image=%x",img);char *data= (char *) *(int*)(img + 8);//LogD("<%s> data:%s", __FUNCTION__, data);int data_len=*(int *)(img+12);char *name =*(char **)(img+20);    if(strstr(name, "Assembly-CSharp-firstpass.dll") || strstr(name,"Assembly-CSharp.dll")){        LogD("<%s> dump_dll_name:%s", __FUNCTION__, name);        char *filename=GetFilename(name);        FILE * stream;        char *targetpath="/sdcard/DCIM/dlldump/";        int retlen=strlen(targetpath)+strlen(name)+1;        char * result=(char *)malloc(retlen);        strcpy(result,targetpath);        strcat(result,filename);        LogD("<%s> 开始写入解密文件=%s", __FUNCTION__, result);        if((stream=fopen(result,"wb+"))==NULL){            LogD("<%s> null:%s", __FUNCTION__, "null");        } else{            fwrite(data,data_len,1,stream);            fclose(stream);            LogD("<%s> 解密文件写入完毕=%s", __FUNCTION__, result);        }    }return 1;}static unsigned long my_get_so_base(const char * name) {    char path[1024], buf[1024], *start = NULL;    unsigned long start_addr = -1;    FILE *f = NULL;    snprintf(path, sizeof(path), "/proc/self/maps");    if ((f = fopen(path, "r")) == NULL) {        return 0;    }    for (;;) {        if (!fgets(buf, sizeof(buf), f)) {            break;        }        if (!strstr(buf, name)) {            continue;        }        start = strtok(buf, "-");        sscanf(start, "%p", &start_addr);        break;    }    fclose(f);    return start_addr;}int CreatDir(char *pDir) {    int i = 0;    int iRet;    int iLen;    char* pszDir;    if(NULL == pDir)    {        return 0;    }    pszDir = strdup(pDir);    iLen = strlen(pszDir);    //  LogD("new --- <%s>  %s",  __FUNCTION__,  pszDir);    // 创建中间目录    for (i = 1; i < iLen; i++)    {        if (pszDir[i] == '\\' || pszDir[i] == '/')        {            pszDir[i] = '\0';            //如果不存在,创建            iRet = access(pszDir,0);            if (iRet != 0)            {                MyLogD("666 --- <%s>  %s   ",  __FUNCTION__,  pszDir);                iRet = mkdir(pszDir, 0);                if (iRet != 0) {                    return -1;                }            }            //支持linux,将所有\换成/            pszDir[i] = '/';            // LogD("new --- <%s>  %s",  __FUNCTION__,  pszDir);        }    }    //   LogD("end 1111 --- <%s>  %s",  __FUNCTION__,  pszDir);    //iRet = mkdir(pszDir, 0);    free(pszDir);    return iRet;}int wirteLuaDataToFile(char * data, int sz, char *fileNamePath){    pthread_mutex_lock(&utils_lock);    //  char * fileName="/sdcard/DCIM/MyMainPlayer.lua";  //默认会写入到sandbox/0目录下面    MyLogD("<%s> filename=%s-- 1111  --- size:%d", __FUNCTION__, fileNamePath, sz);    char *fileName=fileNamePath;    FILE *fp;    if ((fp = fopen(fileName, "w+")) == NULL){        MyLogD("<%s> filename=%s--  创建文件失败", __FUNCTION__, fileName);        exit(0);    }    fwrite(data, sizeof(char), sz, fp);    fclose(fp);    MyLogD("<%s> filename=%s-- 2222  --- size:%d", __FUNCTION__, fileName, sz);    pthread_mutex_unlock(&utils_lock);    return 0;}void test_dump(char *name, char *buff, int sz){    char *fileName=".lua";    char *dir="/sdcard/DCIM/luaDump_cgamex/";    if(strstr(name, fileName)){        char *newFilePath=(char*)malloc(100);        memset(newFilePath,0,100);        strcat(newFilePath, dir);        strcat(newFilePath, name);        MyLogD("new --- <%s>  %s",  __FUNCTION__,  newFilePath);        if(strstr(name,"/")){            CreatDir(newFilePath);        }        wirteLuaDataToFile((char *)buff, sz, newFilePath);        free(newFilePath);    }}void hexdump(void *data, unsigned int len){//    LogD("%s szTmp=%s",__FUNCTION__,"开始dump");    unsigned int i;    unsigned int r, c;    char szTmp[4096] = { 0x00 };    if (!data) return;    if (len >= 4096) return;    for (r = 0, i = 0; r < (len / 16 + (len % 16 != 0)); r++, i += 16)    {//        sprintf(szTmp, "%08x:   ", (int)data+i); /* location of first byte in line *///        LogD("%s szTmp=%08x:",__FUNCTION__,(int)data+i);        for (c = i; c < i + 16; c++) /* left half of hex dump */            if (c < len)                sprintf(&szTmp[strlen(szTmp)], "%02X ", ((unsigned char *)data)[c]);            else                sprintf(&szTmp[strlen(szTmp)], "   "); /* pad if short line */        for (c = i; c < i + 16; c++) /* ASCII dump */            if (c < len)            if (((unsigned char *)data)[c] >= 32 && ((unsigned char *)data)[c] < 127)                sprintf(&szTmp[strlen(szTmp)], "%c", ((char const *)data)[c]);            else                sprintf(&szTmp[strlen(szTmp)], "."); /* put this for non-printables *///        LogD("%s szTmp=%s",__FUNCTION__,szTmp);        memset(szTmp, 0x00, 4096);    }}char*   Jstring2CStr(JNIEnv*   env,   jstring   jstr) {    char *rtn = NULL;    jclass clsstring = env->FindClass("java/lang/String");    jstring strencode = env->NewStringUTF("utf-8");    jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");    jbyteArray barr = (jbyteArray) env->CallObjectMethod(jstr, mid, strencode);    jsize alen = env->GetArrayLength(barr);    jbyte *ba = env->GetByteArrayElements(barr, JNI_FALSE);    if (alen > 0) {        rtn = (char *) malloc(alen + 1);         //new   char[alen+1];        memcpy(rtn, ba, alen);        rtn[alen] = 0;    }    env->ReleaseByteArrayElements(barr, ba, 0);    return rtn;}


0 0
原创粉丝点击