Skip to content
Snippets Groups Projects
Commit b5dbd7a6 authored by weijiel6's avatar weijiel6
Browse files

finish find pwd6sha256 and makefile

parents
No related branches found
No related tags found
No related merge requests found
Pipeline #2746 canceled
crack: crack.c sha256.o
gcc -Wall crack.c sha256.o -o crack
sha256.o: sha256.c sha256.h
gcc -c sha256.c
This diff is collapsed.
crack.c 0 → 100644
/*********************************************************************
* Filename: crack.c
* Author: weijiel6
*********************************************************************/
#include "sha256.h"
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <limits.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/stat.h>
int check_guess(BYTE secrets[], BYTE hash[]);
int get_password(char *line, FILE *fp);
int
get_password(char *line, FILE *fp) {
int i = 0, c;
while(((c = fgetc(fp)) != EOF) && (c !='\n') && (c != '\r')) {
line[i++] = c;
}
line[i] = '\0';
return 1;
}
int check_guess(BYTE secrets[], BYTE hash[]) {
//for(int i=0; i<32;i++){
// printf("%02x",hash[i]);
//}
//printf("\n");
int compare_size = 32;
int flag;
//flag = true;
for(int i = 1 ; i < 11 ; i++) {
flag = -1;
for(int k = (i - 1) *compare_size; k < i *compare_size; k++) {
if (secrets[k] != hash[k-((i - 1) *compare_size)]) {
flag = 0;
break;
}else{
flag=1;
}
}
if(flag == 1){
//printf("true!!!!\n");
return flag * i;
}
}
//printf("%d\n", flag);
return flag;
}
int main( int argc, char **argv )
{
/* check we have 0 argument, test for guessing password*/
if( argc < 2 )
{
FILE *fp;
FILE *fp1;
fp1 = fopen("out.txt", "w");
BYTE secrets[320];
fp = fopen("pwd4sha256", "rb");
fread(secrets, 320, 1, fp);
for(int i = 0; i < 320; i++){
printf("%02x", secrets[i]);
if(((i+1) %32) == 0) {
printf("\n");
}
}
//printf("all done\n");
fclose(fp);
char guess[5];
int secret_num;
SHA256_CTX ctx;
BYTE data[SHA256_BLOCK_SIZE];
for(int i = 32; i < 127; i++) {
for(int j = 32; j < 127; j++) {
for(int l = 32; l < 127; l++) {
for(int k = 32; k < 127; k++) {
sprintf(guess, "%c%c%c%c", i, j, l, k);
//printf("%s\n",guess);
sha256_init(&ctx);
sha256_update(&ctx, (BYTE*)guess, strlen(guess));
sha256_final(&ctx, data);
if (check_guess(secrets, data) > 0) {
secret_num = check_guess(secrets, data);
printf("%s %d\n",guess, secret_num);
fprintf(fp1, "%s %d\n", guess, secret_num);
}
//printf("%s\n", guess);
}
}
}
}
guess[5] = '\0';
return 0;
}
if( argc == 2 )
{
return 0;
}
if( argc == 3 )
{
FILE *fp1;
fp1 = fopen(argv[2], "rb");
BYTE secrets[320];
fread(secrets, 320, 1, fp1);
int fp1_size;
fseek(fp1, 0, SEEK_END);
fp1_size=ftell(fp1);
for(int i = 0; i < fp1_size; i++){
printf("%02x", secrets[i]);
if(((i+1) %32) == 0) {
printf("\n");
}
}
FILE *fp;
char line[10000];
fp = fopen(argv[1], "r");
int secret_num;
for(int i = 0; i < 10000 ; i++) {
get_password(line, fp);
SHA256_CTX ctx;
BYTE data[SHA256_BLOCK_SIZE];
sha256_init(&ctx);
sha256_update(&ctx, (BYTE*)line, strlen(line));
sha256_final(&ctx, data);
if (check_guess(secrets, data) > 0) {
secret_num = check_guess(secrets, data);
printf("%s %d\n", line, secret_num);
}
}
fclose(fp);
fclose(fp1);
return 0;
}
}
dh.c 0 → 100644
/*********************************************************************
* Filename: dh.c
* Author: weijiel6
*********************************************************************/
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <strings.h>
#include <limits.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <netdb.h>
int change_dec(char a);
int compute(int g, int m, int p);
int compute(int g, int m, int p) {
int r;
int result = 1;
while (m > 0) {
r = m % 2;
if (r == 1){
result = (result*g) % p;
}
g = g*g % p;
m = m / 2;
}
return result;
}
int change_dec(char a) {
int result;
if(isalpha(a)) {
result = a - 87;
} else {
result = a - 48;
}
return result;
}
int main( int argc, char **argv ) {
int g = 15;
int p = 97;
char command[50];
strcpy(command, "openssl sha256 dh.c >v.txt" );
system(command);
FILE *fp;
fp = fopen("v.txt", "r");
while((fgetc(fp) != EOF) && (fgetc(fp) != ' ')) {
}
char first_arg = fgetc(fp);
char second_arg = fgetc(fp);
int result_a;
int result_b;
result_a = change_dec(first_arg);
result_b = change_dec(second_arg);
int b = (result_a * 16) + result_b;
int B = compute(g, b, p);
printf("%d %d\n", b, B);
char send_B[3];
sprintf(send_B, "%d\n", B);
printf("The string for the num is %s\n", send_B);
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent * server;
char buffer[256];
portno = 7800;
/* Translate host name into peer's IP address ;
* This is name translation service by the operating system*/
server = gethostbyname("172.26.37.44");
/* Building data structures for socket */
bzero((char *)&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy(server->h_addr_list[0], (char *)&serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(portno);
/* Create TCP socket -- active open
* Preliminary steps: Setup: creation of active open socket*/
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("ERROR opening socket");
exit(0);
}
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
perror("ERROR connecting");
exit(0);
}
bzero(buffer, 256);
strcpy(buffer, "weijiel6\n");
n = write(sockfd, buffer, strlen(buffer));
bzero(buffer, 256);
strcpy(buffer, send_B);
n = write(sockfd, buffer, strlen(buffer));
if (n < 0)
{
perror("ERROR writing to socket");
exit(0);
}
bzero(buffer, 256);
n = read(sockfd, buffer, 255);
if (n < 0)
{
perror("ERROR reading from socket");
exit(0);
}
int A = atoi(buffer);
int keyB = compute(A, b, p);
char send_keyB[10];
sprintf(send_keyB, "%d\n", keyB);
printf("The string for the send_keyB is %s\n", send_keyB);
bzero(buffer, 256);
strcpy(buffer, send_keyB);
n = write(sockfd, buffer, strlen(buffer));
bzero(buffer, 256);
n = read(sockfd, buffer, 255);
printf("%s\n", buffer);
//printf("%d\n", A);
return 0;
}
out.txt 0 → 100644
4226
8686
5226
5236
5237
mcac
oca{
reng
tuyy
weij
\ No newline at end of file
4226
10000
5226
5236
5237
mcac
oca{
reng
tuyy
weij
8686
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAivPORg0Z2jtCmOf7p4Skzln0Hdky0423FTuxNE5BSP/uyqcWI6oGSSpO96bGOcP15LNgJY71aeSdUVtDn9s1Nfky15XbugtCJmsQ1B3dnb/sSApsHGqm3kQuw6mYYT/65zzfKdplHuo05mIQEzHRoPGyqqq3R5iHiMCOMdTP+tuqFlpOZWCkTPobZQU1yu6VYHTnUKffkxh09eOSyO9B4dadyennDFPPfaDfSL2nkxiOZZ/36BpYECxYoC2CpmDkJGIznc5fpkm8dVOt7Cq9ftRC8ziwx5BeTz8/8Wlr7xleLtPit0xsfjJInjYzaDBJRjGtr8Chk1GWuYFzYvsa8w== rsa-key-20190305
\ No newline at end of file
File added
File added
sha256.c 0 → 100644
/*********************************************************************
* Filename: sha256.c
* Author: Brad Conte (brad AT bradconte.com)
* Copyright:
* Disclaimer: This code is presented "as is" without any guarantees.
* Details: Implementation of the SHA-256 hashing algorithm.
SHA-256 is one of the three algorithms in the SHA2
specification. The others, SHA-384 and SHA-512, are not
offered in this implementation.
Algorithm specification can be found here:
* http://csrc.nist.gov/publications/fips/fips180-2/fips180-2withchangenotice.pdf
This implementation uses little endian byte order.
*********************************************************************/
/*************************** HEADER FILES ***************************/
#include "sha256.h"
#include <stdlib.h>
#include <memory.h>
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <time.h>
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/time.h>
/****************************** MACROS ******************************/
#define ROTLEFT(a,b) (((a) << (b)) | ((a) >> (32-(b))))
#define ROTRIGHT(a,b) (((a) >> (b)) | ((a) << (32-(b))))
#define CH(x,y,z) (((x) & (y)) ^ (~(x) & (z)))
#define MAJ(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
#define EP0(x) (ROTRIGHT(x,2) ^ ROTRIGHT(x,13) ^ ROTRIGHT(x,22))
#define EP1(x) (ROTRIGHT(x,6) ^ ROTRIGHT(x,11) ^ ROTRIGHT(x,25))
#define SIG0(x) (ROTRIGHT(x,7) ^ ROTRIGHT(x,18) ^ ((x) >> 3))
#define SIG1(x) (ROTRIGHT(x,17) ^ ROTRIGHT(x,19) ^ ((x) >> 10))
/**************************** VARIABLES *****************************/
static const WORD k[64] = {
0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,
0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,
0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,
0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,
0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,0xd192e819,0xd6990624,0xf40e3585,0x106aa070,
0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,
0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
};
/*********************** FUNCTION DEFINITIONS ***********************/
void sha256_transform(SHA256_CTX *ctx, const BYTE data[])
{
WORD a, b, c, d, e, f, g, h, i, j, t1, t2, m[64];
for (i = 0, j = 0; i < 16; ++i, j += 4)
m[i] = (data[j] << 24) | (data[j + 1] << 16) | (data[j + 2] << 8) | (data[j + 3]);
for ( ; i < 64; ++i)
m[i] = SIG1(m[i - 2]) + m[i - 7] + SIG0(m[i - 15]) + m[i - 16];
a = ctx->state[0];
b = ctx->state[1];
c = ctx->state[2];
d = ctx->state[3];
e = ctx->state[4];
f = ctx->state[5];
g = ctx->state[6];
h = ctx->state[7];
for (i = 0; i < 64; ++i) {
t1 = h + EP1(e) + CH(e,f,g) + k[i] + m[i];
t2 = EP0(a) + MAJ(a,b,c);
h = g;
g = f;
f = e;
e = d + t1;
d = c;
c = b;
b = a;
a = t1 + t2;
}
ctx->state[0] += a;
ctx->state[1] += b;
ctx->state[2] += c;
ctx->state[3] += d;
ctx->state[4] += e;
ctx->state[5] += f;
ctx->state[6] += g;
ctx->state[7] += h;
}
void sha256_init(SHA256_CTX *ctx)
{
ctx->datalen = 0;
ctx->bitlen = 0;
ctx->state[0] = 0x6a09e667;
ctx->state[1] = 0xbb67ae85;
ctx->state[2] = 0x3c6ef372;
ctx->state[3] = 0xa54ff53a;
ctx->state[4] = 0x510e527f;
ctx->state[5] = 0x9b05688c;
ctx->state[6] = 0x1f83d9ab;
ctx->state[7] = 0x5be0cd19;
}
void sha256_update(SHA256_CTX *ctx, const BYTE data[], size_t len)
{
WORD i;
for (i = 0; i < len; ++i) {
ctx->data[ctx->datalen] = data[i];
ctx->datalen++;
if (ctx->datalen == 64) {
sha256_transform(ctx, ctx->data);
ctx->bitlen += 512;
ctx->datalen = 0;
}
}
}
void sha256_final(SHA256_CTX *ctx, BYTE hash[])
{
WORD i;
i = ctx->datalen;
// Pad whatever data is left in the buffer.
if (ctx->datalen < 56) {
ctx->data[i++] = 0x80;
while (i < 56)
ctx->data[i++] = 0x00;
}
else {
ctx->data[i++] = 0x80;
while (i < 64)
ctx->data[i++] = 0x00;
sha256_transform(ctx, ctx->data);
memset(ctx->data, 0, 56);
}
// Append to the padding the total message's length in bits and transform.
ctx->bitlen += ctx->datalen * 8;
ctx->data[63] = ctx->bitlen;
ctx->data[62] = ctx->bitlen >> 8;
ctx->data[61] = ctx->bitlen >> 16;
ctx->data[60] = ctx->bitlen >> 24;
ctx->data[59] = ctx->bitlen >> 32;
ctx->data[58] = ctx->bitlen >> 40;
ctx->data[57] = ctx->bitlen >> 48;
ctx->data[56] = ctx->bitlen >> 56;
sha256_transform(ctx, ctx->data);
// Since this implementation uses little endian byte ordering and SHA uses big endian,
// reverse all the bytes when copying the final state to the output hash.
for (i = 0; i < 4; ++i) {
hash[i] = (ctx->state[0] >> (24 - i * 8)) & 0x000000ff;
hash[i + 4] = (ctx->state[1] >> (24 - i * 8)) & 0x000000ff;
hash[i + 8] = (ctx->state[2] >> (24 - i * 8)) & 0x000000ff;
hash[i + 12] = (ctx->state[3] >> (24 - i * 8)) & 0x000000ff;
hash[i + 16] = (ctx->state[4] >> (24 - i * 8)) & 0x000000ff;
hash[i + 20] = (ctx->state[5] >> (24 - i * 8)) & 0x000000ff;
hash[i + 24] = (ctx->state[6] >> (24 - i * 8)) & 0x000000ff;
hash[i + 28] = (ctx->state[7] >> (24 - i * 8)) & 0x000000ff;
}
}
sha256.h 0 → 100644
/*********************************************************************
* Filename: sha256.h
* Author: Brad Conte (brad AT bradconte.com)
* Copyright:
* Disclaimer: This code is presented "as is" without any guarantees.
* Details: Defines the API for the corresponding SHA1 implementation.
*********************************************************************/
#ifndef SHA256_H
#define SHA256_H
/*************************** HEADER FILES ***************************/
#include <stddef.h>
/****************************** MACROS ******************************/
#define SHA256_BLOCK_SIZE 32 // SHA256 outputs a 32 byte digest
/**************************** DATA TYPES ****************************/
typedef unsigned char BYTE; // 8-bit byte
typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines
typedef struct {
BYTE data[64];
WORD datalen;
unsigned long long bitlen;
WORD state[8];
} SHA256_CTX;
/*********************** FUNCTION DECLARATIONS **********************/
void sha256_init(SHA256_CTX *ctx);
void sha256_update(SHA256_CTX *ctx, const BYTE data[], size_t len);
void sha256_final(SHA256_CTX *ctx, BYTE hash[]);
#endif // SHA256_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment