Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.63 KB | None | 0 0
  1. void __fastcall sub_14034C720(__int64 a1, unsigned int **a2)
  2. {
  3. unsigned int **v2; // r14
  4. __int64 v3; // r12
  5. unsigned int *v4; // rdi
  6. unsigned int v5; // ebx
  7. int v6; // edi
  8. unsigned int v7; // eax
  9. int v8; // edi
  10. void *v9; // r15
  11. void *v10; // rax
  12. __int64 v11; // rbx
  13. int v12; // eax
  14. __int64 v13; // rsi
  15. __int64 v14; // rax
  16. __int64 v15; // rax
  17. void *v16; // rsi
  18. unsigned int *v17; // rbx
  19. __int64 v18; // rdi
  20. __int64 v19; // rax
  21. unsigned int v20; // er15
  22. void *v21; // rsi
  23. int v22; // ebx
  24. signed __int64 v23; // rdi
  25. __int64 v24; // rax
  26. unsigned __int64 v25; // rcx
  27. __int64 v26; // rax
  28. void *v27; // rax
  29. int v28; // er13
  30. void *v29; // rax
  31. __int64 v30; // rbx
  32. void *v31; // rax
  33. __int64 v32; // r12
  34. int v33; // eax
  35. unsigned int *v34; // rdi
  36. unsigned int i; // ebx
  37. __int64 v36; // rax
  38. signed int v37; // ebx
  39. __int64 v38; // rax
  40. __int64 v39; // rax
  41. signed __int64 v40; // r13
  42. __int64 v41; // rax
  43. __int64 v42; // rax
  44. void *v43; // rax
  45. char *v44; // rbx
  46. char *v45; // rdi
  47. unsigned __int64 v46; // rdx
  48. char *v47; // rax
  49. unsigned __int64 v48; // rbx
  50. char *v49; // rdi
  51. char *v50; // rbx
  52. char *j; // r12
  53. unsigned __int64 v52; // rdx
  54. char *v53; // rax
  55. unsigned __int64 v54; // rdi
  56. int v55; // edi
  57. char *v56; // r12
  58. __int64 v57; // rax
  59. BOOL v58; // ebx
  60. __int64 v59; // rbx
  61. signed int v60; // edi
  62. __int64 v61; // rax
  63. __int64 v62; // rcx
  64. int v63; // [rsp+30h] [rbp-D0h]
  65. int v64; // [rsp+34h] [rbp-CCh]
  66. unsigned __int64 v65; // [rsp+38h] [rbp-C8h]
  67. int v66; // [rsp+40h] [rbp-C0h]
  68. int v67; // [rsp+44h] [rbp-BCh]
  69. int v68; // [rsp+48h] [rbp-B8h]
  70. int v69; // [rsp+4Ch] [rbp-B4h]
  71. __int64 v70; // [rsp+50h] [rbp-B0h]
  72. __int64 v71; // [rsp+58h] [rbp-A8h]
  73. __int64 v72; // [rsp+60h] [rbp-A0h]
  74. __int64 v73; // [rsp+68h] [rbp-98h]
  75. unsigned __int64 v74; // [rsp+70h] [rbp-90h]
  76. unsigned __int64 v75; // [rsp+78h] [rbp-88h]
  77. __int128 v76; // [rsp+80h] [rbp-80h]
  78. __int128 v77; // [rsp+90h] [rbp-70h]
  79. __int128 v78; // [rsp+A0h] [rbp-60h]
  80. LPVOID v79[2]; // [rsp+B0h] [rbp-50h]
  81. __int64 v80; // [rsp+C0h] [rbp-40h]
  82. char v81; // [rsp+C8h] [rbp-38h]
  83. LPVOID lpMem[2]; // [rsp+D8h] [rbp-28h]
  84. __int64 v83; // [rsp+E8h] [rbp-18h]
  85. char v84; // [rsp+F0h] [rbp-10h]
  86. char v85; // [rsp+100h] [rbp+0h]
  87. BOOL v86; // [rsp+110h] [rbp+10h]
  88. __int64 v87; // [rsp+118h] [rbp+18h]
  89. char v88; // [rsp+120h] [rbp+20h]
  90. char v89; // [rsp+130h] [rbp+30h]
  91. char v90; // [rsp+140h] [rbp+40h]
  92. LPVOID v91; // [rsp+150h] [rbp+50h]
  93. __int128 v92; // [rsp+160h] [rbp+60h]
  94. char v93; // [rsp+170h] [rbp+70h]
  95. LPVOID v94; // [rsp+190h] [rbp+90h]
  96. char v95; // [rsp+1A0h] [rbp+A0h]
  97. char v96; // [rsp+1B0h] [rbp+B0h]
  98. __int64 v97; // [rsp+230h] [rbp+130h]
  99. char v98; // [rsp+240h] [rbp+140h]
  100. unsigned __int64 v99; // [rsp+248h] [rbp+148h]
  101.  
  102. v97 = a1;
  103. v87 = -2i64;
  104. v2 = a2;
  105. v3 = a1;
  106. v68 = 0;
  107. HIDWORD(v65) = 0;
  108. v66 = 0;
  109. v67 = 0;
  110. v63 = 0;
  111. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)a2[1] + 16i64))(a2[1], &v68, 4i64);
  112. sub_14034F3F0(&v84, &v68, 4i64);
  113. sub_140358550(&v88, &v84);
  114. if ( (unsigned __int8)sub_140358660(&v88, "AGAR") )
  115. {
  116. HIDWORD(v65) = 1;
  117. v66 = 0;
  118. v67 = 0;
  119. }
  120. else
  121. {
  122. (*(void (__fastcall **)(unsigned int *, char *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  123. v2[1],
  124. (char *)&v65 + 4,
  125. 4i64);
  126. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v66, 4i64);
  127. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v67, 4i64);
  128. }
  129. _mm_storeu_si128((__m128i *)&v76, (__m128i)0i64);
  130. v4 = *v2;
  131. if ( *v2 )
  132. {
  133. v5 = *v4;
  134. if ( *v4 )
  135. {
  136. while ( (unsigned int)sub_14034A660(v4, v5, v5 + 1) != v5 )
  137. {
  138. v5 = *v4;
  139. if ( !*v4 )
  140. goto LABEL_11;
  141. }
  142. if ( v5 != -1 )
  143. v76 = *(_OWORD *)v2;
  144. }
  145. }
  146. LABEL_11:
  147. if ( SHIDWORD(v65) > 1 || HIDWORD(v65) == 1 && v66 >= 1 )
  148. {
  149. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v63, 4i64);
  150. v6 = v63;
  151. v7 = v63 & 0x80000000;
  152. *(_DWORD *)(v3 + 328) = v63 & 0x80000000;
  153. v8 = v6 & 0x7FFFFFFF;
  154. v63 = v8;
  155. if ( v7 )
  156. {
  157. v9 = operator new(v8);
  158. (*(void (__fastcall **)(unsigned int *, void *, _QWORD))(*(_QWORD *)v2[1] + 16i64))(v2[1], v9, (unsigned int)v8);
  159. *(_QWORD *)(v97 + 344) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
  160. v10 = operator new(0x90ui64);
  161. v70 = (__int64)v10;
  162. if ( v10 )
  163. v11 = sub_140382070(v10, &unk_140854820, 128i64);
  164. else
  165. v11 = 0i64;
  166. _mm_storeu_si128((__m128i *)&v77, (__m128i)0i64);
  167. if ( v11 )
  168. {
  169. v12 = sub_140035680(v11, v11);
  170. v13 = *(_QWORD *)(v11 + 8);
  171. if ( !v12 )
  172. sub_1400355E0(*(_QWORD *)(v11 + 8));
  173. *(_QWORD *)&v77 = v13;
  174. *((_QWORD *)&v77 + 1) = v11;
  175. }
  176. else
  177. {
  178. v11 = *((_QWORD *)&v77 + 1);
  179. }
  180. sub_1403820D0(v11, v9, (unsigned int)v8);
  181. v14 = sub_140132B30(&qword_140D13680);
  182. v70 = v14;
  183. if ( v14 )
  184. v15 = sub_14036CBB0(v14, v9, v8, 1i64);
  185. else
  186. v15 = 0i64;
  187. sub_1400418E0(v2, v15);
  188. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v63, 4i64);
  189. sub_14034BB50(&v77);
  190. v3 = v97;
  191. }
  192. }
  193. else
  194. {
  195. v63 = v68;
  196. }
  197. if ( v67 > 0 )
  198. {
  199. v16 = operator new(v67);
  200. v17 = v2[1];
  201. v18 = *(_QWORD *)v17;
  202. v19 = (*(__int64 (__fastcall **)(unsigned int *))(*(_QWORD *)v17 + 48i64))(v2[1]);
  203. (*(void (__fastcall **)(unsigned int *, __int64))(v18 + 40))(v17, v19 + v67);
  204. j_j_j__free_base(v16);
  205. }
  206. v20 = 256;
  207. v21 = operator new(0x100ui64);
  208. v22 = 0;
  209. if ( v63 > 0 )
  210. {
  211. v23 = v3 + 296;
  212. do
  213. {
  214. LODWORD(v65) = 0;
  215. (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  216. v2[1],
  217. &v65,
  218. 4i64);
  219. if ( (unsigned int)v65 > v20 )
  220. {
  221. j_j_j__free_base(v21);
  222. v20 = v65;
  223. v21 = operator new((unsigned int)v65);
  224. }
  225. (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v21);
  226. *((_BYTE *)v21 + (unsigned int)v65) = 0;
  227. sub_14034F4C0(&v71);
  228. v71 = 0i64;
  229. v72 = 0i64;
  230. v73 = 0i64;
  231. v74 = 0i64;
  232. v75 = 0i64;
  233. v24 = sub_14034F3F0(&v89, v21, 0xFFFFFFFFi64);
  234. sub_14034F560(&v71, v24);
  235. sub_14034F530(&v89);
  236. (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  237. v2[1],
  238. &v74,
  239. 8i64);
  240. (*(void (__fastcall **)(unsigned int *, __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v73, 8i64);
  241. if ( HIDWORD(v65) != 1 || v66 != 1 )
  242. {
  243. v75 = __PAIR__(v74 >> 62, (v74 & 0x8000000000000000ui64) != 0i64) & 0x1FFFFFFFFi64;
  244. v25 = v74 & 0x3FFFFFFFFFFFFFFFi64;
  245. v73 &= 0x7FFFFFFFFFFFFFFFui64;
  246. }
  247. else
  248. {
  249. LODWORD(v75) = (v74 >> 31) & 1;
  250. v25 = v74 & 0xFFFFFFFF7FFFFFFFui64;
  251. v73 &= 0x7FFFFFFFu;
  252. }
  253. v74 = v25;
  254. v26 = sub_14034B3C0(&v95, &v71, &v71);
  255. v27 = (void *)sub_14034A810(v23, v26);
  256. sub_14034AEA0(v23, v27);
  257. sub_14034F530(&v96);
  258. sub_14034F530(&v95);
  259. sub_14034F530(&v71);
  260. ++v22;
  261. }
  262. while ( v22 < v63 );
  263. v3 = v97;
  264. }
  265. if ( SHIDWORD(v65) > 1 || HIDWORD(v65) == 1 && v66 >= 1 )
  266. {
  267. sub_14034BED0(v2, &v76);
  268. v64 = 0;
  269. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v64, 4i64);
  270. v28 = v64 & 0x7FFFFFFF;
  271. v64 &= 0x7FFFFFFFu;
  272. if ( *(_DWORD *)(v3 + 328) )
  273. {
  274. v29 = operator new(v28);
  275. v30 = (__int64)v29;
  276. v70 = (__int64)v29;
  277. (*(void (__fastcall **)(unsigned int *, void *, _QWORD))(*(_QWORD *)v2[1] + 16i64))(v2[1], v29, (unsigned int)v28);
  278. *(_QWORD *)(v3 + 344) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
  279. v31 = operator new(0x1058ui64);
  280. *(_QWORD *)&v77 = v31;
  281. if ( v31 )
  282. v32 = sub_140381B30(v31, &unk_1408548A0, 56i64);
  283. else
  284. v32 = 0i64;
  285. _mm_storeu_si128((__m128i *)&v78, (__m128i)0i64);
  286. if ( v32 )
  287. {
  288. v33 = sub_140035680(v32, v32);
  289. v34 = *(unsigned int **)(v32 + 8);
  290. if ( !v33 )
  291. {
  292. for ( i = *v34; *v34; i = *v34 )
  293. {
  294. if ( (unsigned int)sub_14034A660(v34, i, i + 1) == i )
  295. break;
  296. }
  297. v30 = v70;
  298. }
  299. *(_QWORD *)&v78 = v34;
  300. *((_QWORD *)&v78 + 1) = v32;
  301. }
  302. else
  303. {
  304. v32 = *((_QWORD *)&v78 + 1);
  305. v34 = (unsigned int *)v78;
  306. }
  307. sub_140381BA0(v32, v30, (unsigned int)v28);
  308. v36 = sub_140132B30(&qword_140D13680);
  309. *(_QWORD *)&v77 = v36;
  310. if ( v36 )
  311. v36 = sub_14036CBB0(v36, v30, v28, 1i64);
  312. sub_1400418E0(v2, v36);
  313. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v64, 4i64);
  314. if ( v34 )
  315. {
  316. v37 = 0;
  317. if ( (unsigned int)sub_14034A670(v34) )
  318. {
  319. v39 = *v34;
  320. }
  321. else
  322. {
  323. if ( (unsigned int)sub_14034A670(v34 + 1) )
  324. {
  325. v38 = v34[1];
  326. v32 = *((_QWORD *)&v78 + 1);
  327. v34 = (unsigned int *)v78;
  328. }
  329. else
  330. {
  331. v37 = 1;
  332. }
  333. *((_QWORD *)v34 + 1) = 0i64;
  334. if ( v32 )
  335. (**(void (__fastcall ***)(__int64, signed __int64))v32)(v32, 1i64);
  336. if ( v37 )
  337. sub_14034EFA0(v34);
  338. }
  339. }
  340. v28 = v64;
  341. v3 = v97;
  342. }
  343. LODWORD(v70) = 0;
  344. if ( v28 > 0 )
  345. {
  346. v40 = v3 + 312;
  347. do
  348. {
  349. LODWORD(v99) = 0;
  350. (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  351. v2[1],
  352. &v99,
  353. 4i64);
  354. if ( (unsigned int)v99 > v20 )
  355. {
  356. j_j_j__free_base(v21);
  357. v20 = v99;
  358. v21 = operator new((unsigned int)v99);
  359. }
  360. (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v21);
  361. *((_BYTE *)v21 + (unsigned int)v99) = 0;
  362. v69 = 0;
  363. (*(void (__fastcall **)(unsigned int *, int *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(v2[1], &v69, 4i64);
  364. _mm_storeu_si128((__m128i *)v79, (__m128i)0i64);
  365. v80 = 0i64;
  366. v41 = sub_14034F3F0(&v90, v21, 0xFFFFFFFFi64);
  367. v42 = sub_14034B440(&v81, v41, v79);
  368. v43 = (void *)sub_14034A870(v40, v42);
  369. sub_14034B0C0(v40, v43);
  370. v44 = (char *)lpMem[0];
  371. if ( lpMem[0] )
  372. {
  373. v45 = (char *)lpMem[1];
  374. if ( lpMem[0] != lpMem[1] )
  375. {
  376. do
  377. {
  378. sub_14034F530(v44);
  379. v44 += 24;
  380. }
  381. while ( v44 != v45 );
  382. v44 = (char *)lpMem[0];
  383. }
  384. v46 = ((unsigned __int64)((unsigned __int128)((v83 - (signed __int64)v44)
  385. * (signed __int128)3074457345618258603i64) >> 64) >> 63)
  386. + ((signed __int64)((unsigned __int128)((v83 - (signed __int64)v44)
  387. * (signed __int128)3074457345618258603i64) >> 64) >> 2);
  388. if ( v46 > 0xAAAAAAAAAAAAAAAi64 )
  389. invalid_parameter_noinfo_noreturn();
  390. if ( 24 * v46 >= 0x1000 )
  391. {
  392. if ( (unsigned __int8)v44 & 0x1F )
  393. invalid_parameter_noinfo_noreturn();
  394. v47 = (char *)*((_QWORD *)v44 - 1);
  395. if ( v47 >= v44 )
  396. invalid_parameter_noinfo_noreturn();
  397. v48 = v44 - v47;
  398. if ( v48 < 8 )
  399. invalid_parameter_noinfo_noreturn();
  400. if ( v48 > 0x27 )
  401. invalid_parameter_noinfo_noreturn();
  402. v44 = v47;
  403. }
  404. j_j__free_base(v44);
  405. _mm_storeu_si128((__m128i *)lpMem, (__m128i)0i64);
  406. v83 = 0i64;
  407. }
  408. sub_14034F530(&v81);
  409. sub_14034F530(&v90);
  410. v49 = (char *)v79[0];
  411. if ( v79[0] )
  412. {
  413. v50 = (char *)v79[0];
  414. for ( j = (char *)v79[1]; v50 != j; v50 += 24 )
  415. sub_14034F530(v50);
  416. v52 = ((unsigned __int64)((unsigned __int128)((v80 - (signed __int64)v49)
  417. * (signed __int128)3074457345618258603i64) >> 64) >> 63)
  418. + ((signed __int64)((unsigned __int128)((v80 - (signed __int64)v49)
  419. * (signed __int128)3074457345618258603i64) >> 64) >> 2);
  420. if ( v52 > 0xAAAAAAAAAAAAAAAi64 )
  421. invalid_parameter_noinfo_noreturn();
  422. if ( 24 * v52 >= 0x1000 )
  423. {
  424. if ( (unsigned __int8)v49 & 0x1F )
  425. invalid_parameter_noinfo_noreturn();
  426. v53 = (char *)*((_QWORD *)v49 - 1);
  427. if ( v53 >= v49 )
  428. invalid_parameter_noinfo_noreturn();
  429. v54 = v49 - v53;
  430. if ( v54 < 8 )
  431. invalid_parameter_noinfo_noreturn();
  432. if ( v54 > 0x27 )
  433. invalid_parameter_noinfo_noreturn();
  434. v49 = v53;
  435. }
  436. j_j__free_base(v49);
  437. }
  438. v55 = 0;
  439. if ( v69 > 0 )
  440. {
  441. v56 = (char *)v91;
  442. do
  443. {
  444. LODWORD(v99) = 0;
  445. (*(void (__fastcall **)(unsigned int *, unsigned __int64 *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  446. v2[1],
  447. &v99,
  448. 4i64);
  449. if ( (unsigned int)v99 > v20 )
  450. {
  451. j_j_j__free_base(v21);
  452. v20 = v99;
  453. v21 = operator new((unsigned int)v99);
  454. }
  455. (*(void (__fastcall **)(unsigned int *, void *))(*(_QWORD *)v2[1] + 16i64))(v2[1], v21);
  456. *((_BYTE *)v21 + (unsigned int)v99) = 0;
  457. (*(void (__fastcall **)(unsigned int *, char *, signed __int64))(*(_QWORD *)v2[1] + 16i64))(
  458. v2[1],
  459. &v98,
  460. 1i64);
  461. v57 = sub_14034F3F0(&v93, v21, 0xFFFFFFFFi64);
  462. v92 = *(_OWORD *)sub_140358550(&v94, v57);
  463. v58 = v98 != 0;
  464. sub_14034F250(&v85, &v92);
  465. v86 = v58;
  466. sub_14034EBB0(v56 + 48, &v85);
  467. sub_14034F530(&v85);
  468. sub_14034F530(&v93);
  469. ++v55;
  470. }
  471. while ( v55 < v69 );
  472. }
  473. LODWORD(v70) = v70 + 1;
  474. }
  475. while ( (signed int)v70 < v64 );
  476. }
  477. }
  478. j_j_j__free_base(v21);
  479. if ( !*(_DWORD *)(v97 + 328) )
  480. *(_QWORD *)(v97 + 344) = (*(__int64 (**)(void))(*(_QWORD *)v2[1] + 48i64))();
  481. v59 = v76;
  482. if ( (_QWORD)v76 )
  483. {
  484. v60 = 0;
  485. if ( (unsigned int)sub_14034A670(v76) )
  486. {
  487. v62 = *(unsigned int *)v76;
  488. }
  489. else
  490. {
  491. if ( (unsigned int)sub_14034A670(v59 + 4) )
  492. v61 = *(unsigned int *)(v59 + 4);
  493. else
  494. v60 = 1;
  495. *(_QWORD *)(v76 + 8) = 0i64;
  496. if ( *((_QWORD *)&v76 + 1) )
  497. (***((void (__fastcall ****)(_QWORD, signed __int64))&v76 + 1))(*((_QWORD *)&v76 + 1), 1i64);
  498. if ( v60 )
  499. sub_14034EFA0(v76);
  500. }
  501. }
  502. sub_14034F530(&v84);
  503. sub_140041840(v2);
  504. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement