XCTF_RE-Crc-300
这题讲道理其实还算简单的,还以为是啥算法呢。。吓我一跳。。拖入ida之后,发现逻辑还是挺清晰的
这个是关键函数,第一个if就可以求出后10个字符是啥了。。
接下就是对一个列表的赋值,然后就是一个dowhile循环256次,最后再判断,这种没办法逆,只能采取暴力,我也将脚本写出来了,一开始是以为hctf这个是可以直接猜的,
这样就可以少4个循环,后面也导致我脚本跑不出结果。其实根据后十个字符没有},我就应该死心了,后来看了wp才明白这题的精妙之处。
实际上就是一个奇偶的问题,奇数和偶数互不打扰,也就几乎把10个未知的,直接达成了5个未知数来计算,省了几个循环,可行性也提高了,当然头铁十个也没问题,但是能不能跑出来就是个问题了。
然后感觉还有注意点在于取出来是多少字节,这玩意得看数据宽度为多大,int4个字节啥的,具体情况具体分析了
#include<bits/stdc++.h> using namespace std; unsigned char byte_4120C0[] = { 0x64, 0x27, 0x77, 0x75, 0x68, 0x60, 0x75, 0x66, 0x6A, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned int dword_40FD60[] = {0, 0, 0, 0, 0, 2516582400L, 815136768, 120624640, 1996959894, 58132272, 2198042375L, 1803748215, 4067132163L, 754084739, 1630335595, 241249522, 3993919788L, 4159573601L, 1895296526, 997259246, 3778769143L, 3135322992L, 1371201851, 156351201, 2567524794L, 4103670097L, 4092893449L, 1358165145, 324072436, 420696307, 3289977680L, 1841568019, 124634137, 520580548, 2535393133L, 2593595143L, 3348797215L, 2412223127L, 4103063450L, 1794412487, 1886057615, 477129460, 337408106, 4044627056L, 904991772, 892727572, 2771727857L, 1671771445, 3915621685L, 3907609509L, 3890800995L, 2716330217L, 648144872, 2737218023L, 2510497441L, 1687528230, 2657392035L, 3953026197L, 1693163108, 3395611550L, 3570033899L, 852806244, 2285032650L, 3683136212L, 249268274, 3473857416L, 1489964763, 3646476046L, 2329499855L, 2760563032L, 3097791193L, 3703088266L, 2044508324, 3430538424L, 3687610844L, 3000749177L, 2024987596, 511226587, 3911088306L, 3588824696L, 3772115230L, 954258921, 674816213, 3794286816L, 1809983544, 2288771624L, 3649596386L, 3537471595L, 2547177864L, 999805657, 2872809426L, 2309700503L, 2575936315L, 731482539, 1277925769, 3058445209L, 162941995, 3490297420L, 3486517686L, 1137692681, 1296289744, 3175957455L, 2092780867, 2977742157L, 2125561021, 3548295548L, 1288928945, 676123518, 3207089363L, 129968204, 755482408, 3089958847L, 3887607047L, 669497389, 3207063480L, 2025793511, 2893594407L, 2443999423L, 496086136, 3206386092L, 2428444049L, 613465885, 1009029311, 322708624, 1578318884, 1683886908, 275013139, 3071304798L, 498536548, 1864218384, 3345948087L, 1590128413, 274646895, 4061159111L, 552734814, 2954949136L, 1789927666, 1818931232, 1147955888, 893676650, 3795141740L, 1222784324, 1900601909, 3111209186L, 4089016648L, 2566109553L, 3080254393L, 1706531059, 4049975192L, 3740362167L, 1105129829, 3191987953L, 2227061214L, 2609167937L, 882607294, 238328708, 51262619, 2097352244, 3564962574L, 3671358723L, 450548861, 1880808148, 1349524186, 3293605914L, 3619967088L, 3956786256L, 3840661444L, 3722767319L, 1843258603, 1936580068, 3547557341L, 2949870445L, 632279923, 1361424339, 3041994159L, 3568652581L, 4107580753L, 2280969397L, 545780948, 4280322036L, 922689671, 3342270240L, 2244425471L, 3548759862L, 2211677639L, 2223231877L, 2743370707L, 2493744259L, 3298075524L, 1455723683, 2555823252L, 1821923012, 325883990, 2685627544L, 2678068076L, 2275385363L, 2592579488L, 3231352735L, 2831194759L, 1806221466, 1684777152, 2741267368L, 480470123, 3961299812L, 1760304291, 2053696540, 4185549036L, 1660516968, 4251122042L, 1476223737, 4015521122L, 3169802237L, 2075979607, 3967532271L, 3387718588L, 1707732091, 2321926636L, 1418356169, 1817479781, 3614200970L, 2312596564L, 1334433644, 1548716503, 22826889, 335633487, 3205759324L, 146740225, 487112468, 1562183871, 3646758152L, 1826184477, 107796829, 1661365465, 3160606316L, 2344379142L, 1988869219, 2943781820L, 1672443531, 1029943158, 255681455, 4195302755L, 1224347453, 2018048527, 645417210, 3156637768L, 4122748536L, 234208294, 135132604, 2366115317L, 1267533837, 4216032520L, 1308314509, 1313733451, 3360574971L, 549998157, 1847642190, 997073096, 3728436768L, 2396928878L, 3180256827L, 549293790, 1579203982, 274604221, 1762680352, 1281953886, 3712772368L, 232606825, 3591232844L, 3537243613L, 3839022605L, 1105515222, 1614931154, 3579855332L, 701849665, 4264154464L, 2264803797L, 3246849577L, 1925285630, 1903346054, 1735488193, 2724688242L, 715286385, 2099946087, 3984403106L, 871202090, 3509841277L, 3838915565L, 65327411, 1006888145, 3241935844L, 432094211, 655999292, 3878099393L, 1206331161, 3561482023L, 81020903, 1258607687, 3259696340L, 2596424452L, 1285210699, 357341890, 4246031514L, 2247955788L, 226884885, 3524101629L, 919735685, 1765200397, 476657362, 102525238, 1795562601, 3043690012L, 179661574, 2768942443L, 900008629, 3929384202L, 2011837861, 4101499445L, 4210325482L, 2835018871L, 3047750388L, 901097722, 288732584, 3591452085L, 1691750709, 2858735121L, 1823106262, 2557258340L, 2996333738L, 1119000684, 306360984, 1427260082, 257233474, 1477399826, 3596095317L, 3386267663L, 3150567000L, 3686517206L, 3873160137L, 2800147387L, 1604773595, 1264559846, 1078681510, 4181740383L, 3170451531L, 2898065728L, 3853303033L, 635808956, 874898860, 3107202533L, 3820565541L, 1826863412, 3631014841L, 853044451, 238213228, 1091449560, 4265676338L, 1845379342, 1970142785, 1551199742, 3747378541L, 1172266101, 222682972, 3255649759L, 2512522565L, 2677391885L, 3483342274L, 231710613, 3591229343L, 3705015759L, 4191999501L, 838458582, 3308386780L, 2361733625L, 1502397745, 1029278917, 3510458764L, 2882616665L, 4205564221L, 3002772433L, 2930965163L, 2125378298, 2893983410L, 816610990, 3643845758L, 651767980, 2972113200L, 1236346585, 3813257510L, 820201905, 976282441, 3813603, 3724556848L, 1373503546, 2991709696L, 3400683998L, 2294985297L, 3263744690L, 2160232650L, 1367392904, 3612442818L, 3369554304L, 1187567441, 960940247, 3627632328L, 3520608582L, 382851129, 1628885464, 3496023761L, 3218104598L, 1170198625, 3125133264L, 3015329215L, 598981189, 3039015866L, 4105511859L, 3035936035L, 565507253, 2921444596L, 3735953844L, 2044636705, 4151959214L, 603421150, 3290691449L, 3015975927L, 1454621731, 2908140484L, 1571641011, 308129110, 85089709, 2567246429L, 2509833490L, 3130366213L, 3485111705L, 1506785941, 2925121466L, 1118722511, 373468761, 253117102, 2769229378L, 3181711126L, 3099436303L, 1522056613, 760920253, 690838200, 3827903834L, 2665752877L, 3097420841L, 45653732, 671266974, 2116551352, 293480450, 974224936, 3124367742L, 146422289, 2282273338L, 92801210, 1594198024, 2103379336, 2457689861L, 1368554847, 1213305469, 2991083922L, 3652339793L, 215593544, 3322730930L, 2311458009L, 1636419084, 23169478, 1526817161, 609943905, 3911473921L, 199828571, 2970347812L, 2326858729L, 3800740107L, 1793231537, 2842354314L, 2276027106L, 2089265514, 1870432169, 795835527, 1630498684, 2254516079L, 2693161263L, 2107672161, 293445766, 1276214688, 1749815677, 1483230225, 1649961036, 90331240, 3406127704L, 2412447074L, 2878327557L, 497782731, 1629334415, 3244367275L, 2529255709L, 4137075041L, 2616628929L, 2627466902L, 1033673718, 759012507, 1714240924, 3060149565L, 2511758893L, 1972745830, 4034237878L, 1861252501, 2423189621L, 1099984624, 3695284334L}; int check() { int v6 = -1; int v4=-1; int v7 = 0; do { v6 = dword_40FD60[2 * (unsigned __int8)(v6 ^ byte_4120C0[v7])] ^ (v6 >> 8); v4 = dword_40FD60[(2 * (unsigned __int8)(v4 ^ byte_4120C0[v7+1]))+1] ^ (v4 >> 8); v7 += 2; } while ( v7 < 256 ); if ( ~v6 == 0xBA56C4F9) return 1; if(~v4 == 0xE89BA203 ) return 2; return 0; } char input[10]; int main() { for(int i=0;i<128;i++) { byte_4120C0[0]=i; byte_4120C0[17]=i; for(int j=0;j<128;j++) { byte_4120C0[34]=j; byte_4120C0[51]=j; for(int k=0;k<128;k++) { byte_4120C0[68]=k; byte_4120C0[85]=k; for(int m=0;m<128;m++) { byte_4120C0[102]=m; byte_4120C0[119]=m; for(int n=0;n<128;n++) { byte_4120C0[136]=n; byte_4120C0[153]=n; if(check()==1) { printf("奇数%c%c%c%c%c",i,j,k,m,n); }else if(check()==2) { printf("偶数%c%c%c%c%c",i,j,k,m,n); } } } } } } for(int i=0;i<=9;i++) { printf("%c",byte_4120C0[i]^7); } }