WPSEC 逆向部分题解

RE签到题:

这道题看起来怪怪的 然后 查看文件是elf32 然后 运行 发现是

emmmmm 这个么  

然后只能拖入ida 看见

 

直接 拖入运行 就ok了

#include<stdio.h>
char v6[10];
char v7[26];
char v8[26];
int main()
{
    for(int i=0;i<10;i++)
         v6[i]=i+48;
    for(int i=0;i<26;i++)
    {
        v7[i]=i+65;
        v8[i]=i-94;
    }
  printf("%c", v8[22] - 65);
  printf("%c%c", v8[15] - 65, v8[18] - 65);
  printf("%c%c%c", v8[4] - 65, v8[2] - 65, 123);
  printf("%c%c%c%c", v7[5], 48, v8[17] - 65, v6[1]);
  printf("%c%c%c%c%c", v8[8] - 65, v7[13], v8[20] - 65, v8[23] - 65, 125);
    return 0;
}

wpsec{F0r1iNux}

程序自校验:

这个是汇编写的程序。。。。。

这个题 是 吾爱破解的creakme。。 好眼熟啊 不过这道题确实难  我都看了一下午 才分析了出来 直接看 图吧

断点就没有什么好说的 直接api 就可以段下来 或者查找字符串 从上向下分析  然后这道题 就很坑爹了。。

幸亏我上面看过这种题 就是 必须获得正确的序列号还有正确的名字 然后这道题静下心看 也不是很难  然后写出注册机就ok了

以前做的时候直接改跳转 注册机还真的没有写出来。。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <windows.h>
using namespace std;

unsigned char * buff;
unsigned long key;
unsigned long  name1;
unsigned long h;
unsigned long l;
char *name;
unsigned long ser;
unsigned char data[0x3E*4+1] = { 0x55, 0x8B, 0xEC, 0x83, 0xC4, 0xFC, 0x8B, 0x45, 0x0C, 0x83, 0xF8, 0x10, 0x75, 0x0D, 0x6A, 0x00, 0xE8, 0x6B, 0x02, 0x00, 0x00, 0x33, 0xC0, 0xC9,
0xC2, 0x10, 0x00, 0x83, 0xF8, 0x0F, 0x75, 0x0E, 0x8B, 0x45, 0x08, 0xE8, 0x18, 0x01, 0x00, 0x00, 0x33, 0xC0, 0xC9, 0xC2, 0x10, 0x00, 0x83, 0xF8,
0x01, 0x75, 0x06, 0x33, 0xC0, 0xC9, 0xC2, 0x10, 0x00, 0x3D, 0x11, 0x01, 0x00, 0x00, 0x0F, 0x85, 0xE7, 0x00, 0x00, 0x00, 0x8B, 0x45, 0x14, 0x3B,
0x05, 0x60, 0x31, 0x40, 0x00, 0x75, 0x1A, 0x6A, 0x00, 0x68, 0x96, 0x30, 0x40, 0x00, 0x68, 0xA7, 0x30, 0x40, 0x00, 0xFF, 0x75, 0x08, 0xE8, 0x17,
0x02, 0x00, 0x00, 0x33, 0xC0, 0xC9, 0xC2, 0x10, 0x00, 0x3B, 0x05, 0x58, 0x31, 0x40, 0x00, 0x74, 0x0C, 0x3B, 0x05, 0x54, 0x31, 0x40, 0x00, 0x0F,
0x85, 0xAE, 0x00, 0x00, 0x00, 0xC7, 0x05, 0xD9, 0x12, 0x40, 0x00, 0x54, 0x45, 0x58, 0x00, 0x6A, 0x00, 0x8D, 0x45, 0xFC, 0x50, 0x6A, 0x64, 0xFF,
0x35, 0x50, 0x31, 0x40, 0x00, 0xE8, 0xBC, 0x01, 0x00, 0x00, 0x83, 0x7D, 0xFC, 0x00, 0x74, 0x5F, 0x50, 0x6A, 0x14, 0x68, 0x6C, 0x31, 0x40, 0x00,
0xFF, 0x35, 0x54, 0x31, 0x40, 0x00, 0xE8, 0xAF, 0x01, 0x00, 0x00, 0x85, 0xC0, 0x74, 0x48, 0xA1, 0x0B, 0x30, 0x40, 0x00, 0xBB, 0x6C, 0x31, 0x40,
0x00, 0x03, 0x03, 0x43, 0x81, 0xFB, 0x7C, 0x31, 0x40, 0x00, 0x75, 0xF5, 0x5B, 0x03, 0xC3, 0x31, 0x05, 0xD9, 0x12, 0x40, 0x00, 0xC1, 0xE8, 0x10,
0x66, 0x29, 0x05, 0xD9, 0x12, 0x40, 0x00, 0xBE, 0xEC, 0x11, 0x40, 0x00, 0xB9, 0x3E, 0x00, 0x00, 0x00, 0x33, 0xDB, 0xEB, 0x04, 0x00, 0x00, 0x00,
0x00, 0xAD, 0x33, 0xD8, 0x49, 0x75, 0xFA, 0x81,0 };


int main()
{
        key = 0xAFFCCFFB; //初始化为最终判断值  0xAFFCCFFB
        buff = data;
        ser = 0;
        name = new char[250];
        memset(name, 0, 250);
        for (int x = 0; x < 0x3E * 4; x += 4)
        {
                key = key ^ *(unsigned long *)&buff[x];//开始异或
        }
        key = (key << 24) + (key >> 8);//调整字节顺序
        gets(name);
        name1 = 0x58455443;//我们那个CTEX 字符串
        unsigned long *t1=0;
        for (int x =0 ; x < 0x10; x++)
        {
                t1 = (unsigned long *)&name[x];
                name1 = name1 + *t1;
        }
        h = key >> 16;      //取出高位
        l = key & 0x0000ffff;  //取出低位
        l = l +( h^0x58);
        key = (h << 16) + l;
        key = key ^ 0x584554;
        ser = key - (name1);

        cout << "key:" << dec << ser << endl;
        buff = NULL;
        if (name != NULL)
                delete[] name;
        name = NULL;
        system("pause");
        return 0;
}

这里参考了 别人的代码  直接运行 得出号就行

然后喵的注册机 断下messagebox

然后发现这个题 不像是vc写的啊  反汇编看起来好繁琐啊  

然后 最后直接爆出结果 。。。。

 

 

听说你不想学现代?

这道题 emmm   看起来就感觉很难搞 但是仔细看看的话 其实还是有突破点的  

这里看的虽然有很多相加 相乘的伪c  但是 我们仔细看看 还是发现有很多好玩之处的 

也就是说  感觉v6 v7 v8 是一个整体 

果然改了之后感觉就很舒服 !但是不会矩阵解题 然后爆破 我这辈子都跑不出来答案。。

#include<stdio.h>
#include<windows.h>
char a[20];
void ppx(int sum)
{
    if(sum==20)
    {
        a[sum]='\0';
        if (1009 * a[0] + 1129 * a[1] + 1289 * a[2] + 1447 * a[3] + 1579 * a[4] + 1723 * a[5] + 1879 * a[6] + 2039 * a[7] + 2207 * a[8] + 2351 * a[9] + 2521 * a[10] + 2683 * a[11] + 2803 * a[12] + 2971 * a[13] + 3169 * a[14] + 3329 * a[15] + 3499 * a[16] + 3637 * a[17] + 3803 * a[18] + 3967 * a[19] == 4961785 && 1151 * a[0] + 1291 * a[1] + 1451 * a[2] + 1583 * a[3] + 1733 * a[4] + 1889 * a[5] + 2053 * a[6] + 2213 * a[7] + 2357 * a[8] + 2531 * a[9] + 2687 * a[10] + 2819 * a[11] + 2999 * a[12] + 3181 * a[13] + 3331 * a[14] + 3511 * a[15] + 3643 * a[16] + 3821 * a[17] + 3989 * a[18] + 1013 * a[19] == 4924355 && 1297 * a[0] + 1453 * a[1] + 1597 * a[2] + 1741 * a[3] + 1901 * a[4] + 2063 * a[5] + 2221 * a[6] + 2371 * a[7] + 2539 * a[8] + 2689 * a[9] + 2833 * a[10] + 3001 * a[11] + 3187 * a[12] + 3343 * a[13] + 3517 * a[14] + 3659 * a[15] + 3823 * a[16] + 4001 * a[17] + 1019 * a[18] + 1153 * a[19] == 4901419 && 1459 * a[0] + 1601 * a[1] + 1747 * a[2] + 1907 * a[3] + 2069 * a[4] + 2237 * a[5] + 2377 * a[6] + 2543 * a[7] + 2693 * a[8] + 2837 * a[9] + 3011 * a[10] + 3191 * a[11] + 3347 * a[12] + 3527 * a[13] + 3671 * a[14] + 3833 * a[15] + 4003 * a[16] + 1021 * a[17] + 1163 * a[18] + 1301 * a[19] == 4915459 && 1607 * a[0] + 1753 * a[1] + 1913 * a[2] + 2081 * a[3] + 2239 * a[4] + 2381 * a[5] + 2549 * a[6] + 2699 * a[7] + 2843 * a[8] + 3019 * a[9] + 3203 * a[10] + 3359 * a[11] + 3529 * a[12] + 3673 * a[13] + 3847 * a[14] + 4007 * a[15] + 1031 * a[16] + 1171 * a[17] + 1303 * a[18] + 1471 * a[19] == 4868261 && 1759 * a[0] + 1931 * a[1] + 2083 * a[2] + 2243 * a[3] + 2383 * a[4] + 2551 * a[5] + 2707 * a[6] + 2851 * a[7] + 3023 * a[8] + 3209 * a[9] + 3361 * a[10] + 3533 * a[11] + 3677 * a[12] + 3851 * a[13] + 4013 * a[14] + 1033 * a[15] + 1181 * a[16] + 1307 * a[17] + 1481 * a[18] + 1609 * a[19] == 4825167 && 1933 * a[0] + 2087 * a[1] + 2251 * a[2] + 2389 * a[3] + 2557 * a[4] + 2711 * a[5] + 2857 * a[6] + 3037 * a[7] + 3217 * a[8] + 3371 * a[9] + 3539 * a[10] + 3691 * a[11] + 3853 * a[12] + 4019 * a[13] + 1039 * a[14] + 1187 * a[15] + 1319 * a[16] + 1483 * a[17] + 1613 * a[18] + 1777 * a[19] == 4794225 && 2089 * a[0] + 2267 * a[1] + 2393 * a[2] + 2579 * a[3] + 2713 * a[4] + 2861 * a[5] + 3041 * a[6] + 3221 * a[7] + 3373 * a[8] + 3541 * a[9] + 3697 * a[10] + 3863 * a[11] + 4021 * a[12] + 1049 * a[13] + 1193 * a[14] + 1321 * a[15] + 1487 * a[16] + 1619 * a[17] + 1783 * a[18] + 1949 * a[19] == 4760281 && 2269 * a[0] + 2399 * a[1] + 2591 * a[2] + 2719 * a[3] + 2879 * a[4] + 3049 * a[5] + 3229 * a[6] + 3389 * a[7] + 3547 * a[8] + 3701 * a[9] + 3877 * a[10] + 4027 * a[11] + 1051 * a[12] + 1201 * a[13] + 1327 * a[14] + 1489 * a[15] + 1621 * a[16] + 1787 * a[17] + 1951 * a[18] + 2099 * a[19] == 4734733 && 2411 * a[0] + 2593 * a[1] + 2729 * a[2] + 2887 * a[3] + 3061 * a[4] + 3251 * a[5] + 3391 * a[6] + 3557 * a[7] + 3709 * a[8] + 3881 * a[9] + 4049 * a[10] + 1061 * a[11] + 1213 * a[12] + 1361 * a[13] + 1493 * a[14] + 1627 * a[15] + 1789 * a[16] + 1973 * a[17] + 2111 * a[18] + 2273 * a[19] == 4730929 && 2609 * a[0] + 2731 * a[1] + 2897 * a[2] + 3067 * a[3] + 3253 * a[4] + 3407 * a[5] + 3559 * a[6] + 3719 * a[7] + 3889 * a[8] + 4051 * a[9] + 1063 * a[10] + 1217 * a[11] + 1367 * a[12] + 1499 * a[13] + 1637 * a[14] + 1801 * a[15] + 1979 * a[16] + 2113 * a[17] + 2281 * a[18] + 2417 * a[19] == 4747889 && 2741 * a[0] + 2903 * a[1] + 3079 * a[2] + 3257 * a[3] + 3413 * a[4] + 3571 * a[5] + 3727 * a[6] + 3907 * a[7] + 4057 * a[8] + 1069 * a[9] + 1223 * a[10] + 1373 * a[11] + 1511 * a[12] + 1657 * a[13] + 1811 * a[14] + 1987 * a[15] + 2129 * a[16] + 2287 * a[17] + 2423 * a[18] + 2617 * a[19] == 4920757 && 2909 * a[0] + 3083 * a[1] + 3259 * a[2] + 3433 * a[3] + 3581 * a[4] + 3733 * a[5] + 3911 * a[6] + 4073 * a[7] + 1087 * a[8] + 1229 * a[9] + 1381 * a[10] + 1523 * a[11] + 1663 * a[12] + 1823 * a[13] + 1993 * a[14] + 2131 * a[15] + 2293 * a[16] + 2437 * a[17] + 2621 * a[18] + 2749 * a[19] == 4879937 && 3089 * a[0] + 3271 * a[1] + 3449 * a[2] + 3583 * a[3] + 3739 * a[4] + 3917 * a[5] + 4079 * a[6] + 1091 * a[7] + 1231 * a[8] + 1399 * a[9] + 1531 * a[10] + 1667 * a[11] + 1831 * a[12] + 1997 * a[13] + 2137 * a[14] + 2297 * a[15] + 2441 * a[16] + 2633 * a[17] + 2753 * a[18] + 2917 * a[19] == 4897933 && 3299 * a[0] + 3457 * a[1] + 3593 * a[2] + 3761 * a[3] + 3919 * a[4] + 4091 * a[5] + 1093 * a[6] + 1237 * a[7] + 1409 * a[8] + 1543 * a[9] + 1669 * a[10] + 1847 * a[11] + 1999 * a[12] + 2141 * a[13] + 2309 * a[14] + 2447 * a[15] + 2647 * a[16] + 2767 * a[17] + 2927 * a[18] + 3109 * a[19] == 4907643 && 3461 * a[0] + 3607 * a[1] + 3767 * a[2] + 3923 * a[3] + 4093 * a[4] + 1097 * a[5] + 1249 * a[6] + 1423 * a[7] + 1549 * a[8] + 1693 * a[9] + 1861 * a[10] + 2003 * a[11] + 2143 * a[12] + 2311 * a[13] + 2459 * a[14] + 2657 * a[15] + 2777 * a[16] + 2939 * a[17] + 3119 * a[18] + 3301 * a[19] == 4870465 && 3613 * a[0] + 3769 * a[1] + 3929 * a[2] + 4099 * a[3] + 1103 * a[4] + 1259 * a[5] + 1427 * a[6] + 1553 * a[7] + 1697 * a[8] + 1867 * a[9] + 2011 * a[10] + 2153 * a[11] + 2333 * a[12] + 2467 * a[13] + 2659 * a[14] + 2789 * a[15] + 2953 * a[16] + 3121 * a[17] + 3307 * a[18] + 3463 * a[19] == 5026317 && 3779 * a[0] + 3931 * a[1] + 4111 * a[2] + 1109 * a[3] + 1277 * a[4] + 1429 * a[5] + 1559 * a[6] + 1699 * a[7] + 1871 * a[8] + 2017 * a[9] + 2161 * a[10] + 2339 * a[11] + 2473 * a[12] + 2663 * a[13] + 2791 * a[14] + 2957 * a[15] + 3137 * a[16] + 3313 * a[17] + 3467 * a[18] + 3617 * a[19] == 5045171 && 3943 * a[0] + 4127 * a[1] + 1117 * a[2] + 1279 * a[3] + 1433 * a[4] + 1567 * a[5] + 1709 * a[6] + 1873 * a[7] + 2027 * a[8] + 2179 * a[9] + 2341 * a[10] + 2477 * a[11] + 2671 * a[12] + 2797 * a[13] + 2963 * a[14] + 3163 * a[15] + 3319 * a[16] + 3469 * a[17] + 3623 * a[18] + 3793 * a[19] == 5163611 && 4129 * a[0] + 1123 * a[1] + 1283 * a[2] + 1439 * a[3] + 1571 * a[4] + 1721 * a[5] + 1877 * a[6] + 2029 * a[7] + 2203 * a[8] + 2347 * a[9] + 2503 * a[10] + 2677 * a[11] + 2801 * a[12] + 2969 * a[13] + 3167 * a[14] + 3323 * a[15] + 3491 * a[16] + 3631 * a[17] + 3797 * a[18] + 3947 * a[19] == 5186559)
        {
            if (a[1] == a[3])
            {
                if (a[7] == a[10])
                {
                    if (a[1] == a[7])
                    {
                        if (a[10] == '_')
                        {
                            printf("%s\n",a);
                            system("pause");
                        }

                    }
                }
            }
        }
        return;
    }
    for(int i=48;i<=122;i++)
    {
         a[sum++]=i;
         ppx(sum);
         sum--;
    }

}
int main()
{
    ppx(0);
    return 0;
}

但是 有个新的方法是 z3约束   

这是 py源码 但是没有跑出来  不知道是什么情况  但是这个方法确实可靠 

from z3 import *
s = Solver()

a = [Int('a%d'%i) for i in range(20)]

for i in a:
	s.add(0<i)
	s.add(i<256)
s.add(a[1] == a[3])
s.add(a[7] == a[10])
s.add(a[1] == a[7])
s.add(a[10] == 0x5F)
s.add(1009 * a[0] + 1129 * a[1] + 1289 * a[2] + 1447 * a[3] + 1579 * a[4] + 1723 * a[5] + 1879 * a[6] + 2039 * a[7] + 2207 * a[8] + 2351 * a[9] + 2521 * a[10] + 2683 * a[11] + 2803 * a[12] + 2971 * a[13] + 3169 * a[14] + 3329 * a[15] + 3499 * a[16] + 3637 * a[17] + 3803 * a[18] + 3967 * a[19] == 4961785)
s.add(1151 * a[0] + 1291 * a[1] + 1451 * a[2] + 1583 * a[3] + 1733 * a[4] + 1889 * a[5] + 2053 * a[6] + 2213 * a[7] + 2357 * a[8] + 2531 * a[9] + 2687 * a[10] + 2819 * a[11] + 2999 * a[12] + 3181 * a[13] + 3331 * a[14] + 3511 * a[15] + 3643 * a[16] + 3821 * a[17] + 3989 * a[18] + 1013 * a[19] == 4924355)
s.add(1297 * a[0] + 1453 * a[1] + 1597 * a[2] + 1741 * a[3] + 1901 * a[4] + 2063 * a[5] + 2221 * a[6] + 2371 * a[7] + 2539 * a[8] + 2689 * a[9] + 2833 * a[10] + 3001 * a[11] + 3187 * a[12] + 3343 * a[13] + 3517 * a[14] + 3659 * a[15] + 3823 * a[16] + 4001 * a[17] + 1019 * a[18] + 1153 * a[19] == 4901419)
s.add(1459 * a[0] + 1601 * a[1] + 1747 * a[2] + 1907 * a[3] + 2069 * a[4] + 2237 * a[5] + 2377 * a[6] + 2543 * a[7] + 2693 * a[8] + 2837 * a[9] + 3011 * a[10] + 3191 * a[11] + 3347 * a[12] + 3527 * a[13] + 3671 * a[14] + 3833 * a[15] + 4003 * a[16] + 1021 * a[17] + 1163 * a[18] + 1301 * a[19] == 4915459)
s.add(1607 * a[0] + 1753 * a[1] + 1913 * a[2] + 2081 * a[3] + 2239 * a[4] + 2381 * a[5] + 2549 * a[6] + 2699 * a[7] + 2843 * a[8] + 3019 * a[9] + 3203 * a[10] + 3359 * a[11] + 3529 * a[12] + 3673 * a[13] + 3847 * a[14] + 4007 * a[15] + 1031 * a[16] + 1171 * a[17] + 1303 * a[18] + 1471 * a[19] == 4868261)
s.add(1759 * a[0] + 1931 * a[1] + 2083 * a[2] + 2243 * a[3] + 2383 * a[4] + 2551 * a[5] + 2707 * a[6] + 2851 * a[7] + 3023 * a[8] + 3209 * a[9] + 3361 * a[10] + 3533 * a[11] + 3677 * a[12] + 3851 * a[13] + 4013 * a[14] + 1033 * a[15] + 1181 * a[16] + 1307 * a[17] + 1481 * a[18] + 1609 * a[19] == 4825167)
s.add(1933 * a[0] + 2087 * a[1] + 2251 * a[2] + 2389 * a[3] + 2557 * a[4] + 2711 * a[5] + 2857 * a[6] + 3037 * a[7] + 3217 * a[8] + 3371 * a[9] + 3539 * a[10] + 3691 * a[11] + 3853 * a[12] + 4019 * a[13] + 1039 * a[14] + 1187 * a[15] + 1319 * a[16] + 1483 * a[17] + 1613 * a[18] + 1777 * a[19] == 4794225)
s.add(2089 * a[0] + 2267 * a[1] + 2393 * a[2] + 2579 * a[3] + 2713 * a[4] + 2861 * a[5] + 3041 * a[6] + 3221 * a[7] + 3373 * a[8] + 3541 * a[9] + 3697 * a[10] + 3863 * a[11] + 4021 * a[12] + 1049 * a[13] + 1193 * a[14] + 1321 * a[15] + 1487 * a[16] + 1619 * a[17] + 1783 * a[18] + 1949 * a[19] == 4760281)
s.add(2269 * a[0] + 2399 * a[1] + 2591 * a[2] + 2719 * a[3] + 2879 * a[4] + 3049 * a[5] + 3229 * a[6] + 3389 * a[7] + 3547 * a[8] + 3701 * a[9] + 3877 * a[10] + 4027 * a[11] + 1051 * a[12] + 1201 * a[13] + 1327 * a[14] + 1489 * a[15] + 1621 * a[16] + 1787 * a[17] + 1951 * a[18] + 2099 * a[19] == 4734733)
s.add(2411 * a[0] + 2593 * a[1] + 2729 * a[2] + 2887 * a[3] + 3061 * a[4] + 3251 * a[5] + 3391 * a[6] + 3557 * a[7] + 3709 * a[8] + 3881 * a[9] + 4049 * a[10] + 1061 * a[11] + 1213 * a[12] + 1361 * a[13] + 1493 * a[14] + 1627 * a[15] + 1789 * a[16] + 1973 * a[17] + 2111 * a[18] + 2273 * a[19] == 4730929)
s.add(2609 * a[0] + 2731 * a[1] + 2897 * a[2] + 3067 * a[3] + 3253 * a[4] + 3407 * a[5] + 3559 * a[6] + 3719 * a[7] + 3889 * a[8] + 4051 * a[9] + 1063 * a[10] + 1217 * a[11] + 1367 * a[12] + 1499 * a[13] + 1637 * a[14] + 1801 * a[15] + 1979 * a[16] + 2113 * a[17] + 2281 * a[18] + 2417 * a[19] == 4747889)
s.add(2741 * a[0] + 2903 * a[1] + 3079 * a[2] + 3257 * a[3] + 3413 * a[4] + 3571 * a[5] + 3727 * a[6] + 3907 * a[7] + 4057 * a[8] + 1069 * a[9] + 1223 * a[10] + 1373 * a[11] + 1511 * a[12] + 1657 * a[13] + 1811 * a[14] + 1987 * a[15] + 2129 * a[16] + 2287 * a[17] + 2423 * a[18] + 2617 * a[19] == 4920757)
s.add(2909 * a[0] + 3083 * a[1] + 3259 * a[2] + 3433 * a[3] + 3581 * a[4] + 3733 * a[5] + 3911 * a[6] + 4073 * a[7] + 1087 * a[8] + 1229 * a[9] + 1381 * a[10] + 1523 * a[11] + 1663 * a[12] + 1823 * a[13] + 1993 * a[14] + 2131 * a[15] + 2293 * a[16] + 2437 * a[17] + 2621 * a[18] + 2749 * a[19] == 4879937)
s.add(3089 * a[0] + 3271 * a[1] + 3449 * a[2] + 3583 * a[3] + 3739 * a[4] + 3917 * a[5] + 4079 * a[6] + 1091 * a[7] + 1231 * a[8] + 1399 * a[9] + 1531 * a[10] + 1667 * a[11] + 1663 * a[12] + 1823 * a[13] + 1993 * a[14] + 2131 * a[15] + 2293 * a[16] + 2437 * a[17] + 2621 * a[18] + 2749 * a[19] == 4879937)

if s.check() == sat:
        print s.model()

 

然后后面有一道what 那个题 我以前做过 可以翻一下 就能出来 

然后 那两道 好像都是要脱upx 但是是个变形壳。。。还要分析啊

啊 我失误了  我以为是变形壳 其实不是 只要 upx -d file -o  file_  就能脱掉了 然后 打开 文件 

然后发现

 

嗯哼??? emmmm

然后点开flag  直接

直接提交flag 就可以做出来了。。。

NANA那个题 我学长和我说过 但是。。。。

emmm emmm  我还是不会 最后 经过一个 大四学长给了源码 还有wp之后 我也明白了这个题的思路  

其实这个题很简单 (只是我想的麻烦了 然后这个题我的脚本也没有写出来 感觉是有一点问题的)

但是  最后还是看了题解把flag的值偷出来了 。。。。

已进入这个题 就有两个东西  一个是反调试  主要应该是监听端口 大于 15000直接退出  然后第二个 就是一个函数

 

这二个应该是让得到 cpu 还有操作系统的值 然后进行操作 两次md5  我就放弃了对他的操作得到 key 然后 就是 根据明文还有密文进行 爆破key  然后我的想法就是直接爆破 或许我的des 写的不是他要求的des 这个就很恶心了 没办法  只能慢慢跑了

3DES ECB pkcs7 这个是des 的版本。。。。 然后跑出来的key是  KEY:FFCDDABBBBCB 本来以为这样就结束了 但是分析后面的程序你会发现还有个图片  

本来就一头雾水 这是什么鬼吗  这个图片是干嘛的 后来学长告诉我 而且png只有13个像素点 

然后~~~~~~~~~~~~~~~~~~ 

emmm  然后就可以 对key 和像素的 异或  

emmmm 反正这方面 我还是不是很了解。。。

下面直接放脚本算了///////////////////

f=open('test.png','rb').read()
print(len(f))
salt=[0x3c,0x91,0xf3,0xd7,0x17,0x65,0xfd,0x47,0x7,0xa,0x77,0xe8,0xc7,0x1a,0xc6,0xfd,0x80,0x3d,0xda,0xff,0xae,0x77,0xa7,0x65,0x1,0x5e,0xed,0xd6,0xc8,0x1e,0xc4,0xe1,0xc4,0xbe,0x85,0x5c,0x93,0x58,0x8,0xd7,0xb5,0xf8,0x2c,0x59,0x8d,0x33,0xb7,0xa0,0x3b,0xe0,0xf1,0xc7,0x97,0xdb,0xf8,0xf0,0x8,0xe9,0xc1,0xc,0x85,0x6c,0x3b,0xc0,0x57,0x67,0xcd,0x20,0x8b,0x7e,0xd8,0xda,0x28,0x12,0xe5,0xd1,0xa6,0xe,0x87,0x87,0xa5,0xba,0xf,0xc8,0x49,0xd6,0x50,0xcb,0x6b,0x33,0x1e,0x7c,0x50,0xd9,0xb4,0xb5,0x9,0x51,0x92,0x52,0x3d,0x33,0x5a,0x50,0xef,0x50,0x75,0xa0,0x5e,0x91,0x18]
for i in range(len(f)):
    print(hex(f[i]^salt[i]),end=',')
a=[
	0x3b,0x20,0x71,0x20,0x20,0x73,
	0x74,0x71,0x21,0x21,0x71,0x74,
	0x76,0x6b,0x74,0x73,0x76,0x23,
	0x6f,0x20,0x27,0x76,0x77,0x6f,
	0x7f,0x7e,0x25,0x20,0x69,0x23,
	0x7a,0x20,0x20,0x20,0x27,0x76,
	0x70,0x3d,0x24,0x25,0x28,0x27
]
b="FFCDDABBBBCB"
c=""
for i in range(len(a)):
	c+=chr(a[i]^ord(b[i%12]))
print c[::-1]

# flag{64dbbb8b-df89-44eb-b277-062cc362dd2f}

 

难受啊 马飞 

这道题绝对算是比较难的题了   不仅考验编程能力 还考验密码学知识 更坑的是 还考验我们。。。。。。经验

**********************************************************************************************************************************

重新认识这道题

先来爆破key

这个是爆破 的脚本

#!/usr/bin/env python3
# encoding=utf-8
import base64
import hashlib
import os
from Crypto.Cipher import DES3
import pyDes
import sys

key="key:FF"

l="ABCDEF"
text="Hint:The_key_is_the_key"

for ii in l:
	for jj in l:
		for kk in l:
			for iii in l:
				for jjj in l:
					for kkk in l:
						for iiii in l:
							for jjjj in l:
								for kkkk in l:
									for pp in l:
										text="Hint:The_key_is_the_key"
										#key="KEY:FFCDDABBBBCB"
										key="KEY:FF"
										#print (str(ii)+str(jj)+chr(kk))
										key+=ii+jj+kk
										key+=iii+jjj+kkk
										key+=iiii+jjjj+kkkk
										key+=pp

										for i in range(8):
											key+=chr(0)


										x = len(text) % 8
										if x != 0:
											text = text + chr(8-x) * (8 - x)
										text = text.encode('utf-8')
										key=key.encode('utf-8')
										s=DES3.new(key, DES3.MODE_ECB)
										ciphertext = s.encrypt(text)
										#x = len(text) % 8

										s=""
										print(ciphertext)
										for i in ciphertext:
											s+=hex(i)[2:]


										print("%s,decode:%s"%(key[:-8],s))
										if s=='f43acddb566533cd32c8bf02ce1d54a8f11b532dad6a5':
											print(key[:-8])
											os.system("pause")
											exit()

 去rbg的python 脚本

#!/usr/bin/env python3
# encoding=utf-8
import base64
import hashlib
import os
from Crypto.Cipher import DES3
import pyDes
import sys
from PIL import Image
im = Image.open("flag.png")
pix = im.load()
width = im.size[0]
height = im.size[1]
l=[]
for x in range(width):
    for y in range(height):
        r, g, b = pix[x, y]
        l.append(r)
        l.append(g)
        l.append(b)

        #print(hex(r), hex(g), hex(b))
print(l)

然后异或一下

#!/usr/bin/env python3
# encoding=utf-8
import base64
import hashlib
import os
from Crypto.Cipher import DES3
import pyDes
import sys
from PIL import Image
im = Image.open("flag.png")
pix = im.load()
width = im.size[0]
height = im.size[1]
l=[]
for x in range(width):
    for y in range(height):
        r, g, b = pix[x, y]
        l.append(r)
        l.append(g)
        l.append(b)

        #print(hex(r), hex(g), hex(b))
print(l)
s="FFCDDABBBBCB"
flag=""
for i in range(len(l)):
	flag+=chr(ord(s[i%len(s)])^(l[i]))

print (flag[::-1])

然后就搞定了

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值