{"action":"created","comment":{"url":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/comments/245203405","pull_request_review_id":189262349,"id":245203405,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI0NTIwMzQwNQ==","diff_hunk":"@@ -2297,3 +2298,351 @@ elf_close_object(elfobj_t *obj)\n \t */\n \tmunmap(obj->mem, obj->size);\n }\n+\n+bool\n+elf_has_header(const char *path, bool *has_header, elf_error_t *error) \n+{\n+ \tint fd;\n+        int magic;\n+\n+        if((fd = open(path, O_RDONLY)) < 0) {\n+\t\telf_error_set(error, \"open: %s\", strerror(errno));\n+\t\treturn false;\n+\t}\n+\t\n+\tif(pread(fd, &magic, sizeof(int), 0) != sizeof(int)) {\n+\t\telf_error_set(error, \"pread: %s\", strerror(errno));\n+\t\treturn false;\n+\t}\n+\t*has_header = (magic == 0x464c457f) ? true : false;\n+\tclose(fd);\n+\treturn true;\n+}\n+\n+/*\n+ * Handles opening binary stubs that reside in disk. Saves instance as a elfobj_t.\n+ */\n+bool\n+elf_open_stub(const char *path, struct elfobj *obj, elf_error_t *error) \n+{\n+\tint fd;\n+\tstruct stat st;\n+\tunsigned int open_flags = O_RDWR;\n+\tunsigned int mmap_perms = PROT_READ|PROT_WRITE;\n+\tunsigned int mmap_flags = MAP_PRIVATE;\n+\tuint8_t *mem;\n+\n+\tmemset(obj, 0, sizeof(*obj));\n+\tif((fd = open(path, open_flags, S_IRUSR|S_IRGRP|S_IROTH)) < 0) {\n+\t\telf_error_set(error, \"open: %s\", strerror(errno));\n+\t\treturn false;\n+\t}\n+\tobj->fd = fd;\n+\tobj->path = path;\n+\t\t\n+\tif (fstat(fd, &st) < 0) {\n+\t\telf_error_set(error, \"fstat: %s\", strerror(errno));\n+\t\tclose(fd);\n+\t\treturn false;\n+\t}\n+\tobj->size = st.st_size;\n+\n+\tif((mem = mmap(NULL, st.st_size, mmap_perms, mmap_flags, fd, 0)) == MAP_FAILED) {\n+\t\telf_error_set(error, \"mmap: %s\", strerror(errno));\n+\t\tclose(fd);\n+\t\treturn false;\n+\t}\n+\tobj->mem = mem;\n+\tobj->type = ELF_ET_STUB;\n+\treturn true;\n+}\n+\n+/*\n+ * Handles initialization of a elfobj_t for a given stub supplied as a binary array.\n+ */\n+bool\n+elf_init_stub(struct elfobj *obj, uint8_t *mem, size_t size, elf_error_t *error) \n+{\n+\tif (obj == NULL) {\n+\t\telf_error_set(error, \"Invalid elfobj_t address\");\n+\t\treturn false;\n+\t}\n+\tif (mem == NULL) {\n+\t\telf_error_set(error, \"Invalid stub buffer address\");\n+\t\treturn false;\n+\t}\n+\tobj->type = ELF_ET_STUB;\n+\tobj->mem = mem;\n+\tobj->size = size;\n+\treturn true;\n+}\n+\n+/*\n+ * Creates an elf object. initial content can be specified to contain a given ELF file.\n+ */\n+bool\n+elf_create_object(const char *path, struct elfobj *obj, struct elfobj *copy, size_t size, uint64_t load_flags, elf_error_t *error) \n+{\n+\tint fd;\n+\tunsigned int open_flags = O_RDWR|O_CREAT|O_APPEND;\n+\tunsigned int mmap_perms = PROT_READ|PROT_WRITE;\n+\tunsigned int mmap_flags = MAP_PRIVATE;\n+\tuint8_t *mem;\n+\n+\t/*\n+\t * we count on this being initialized for various sanity checks.\n+\t */\n+\tmemset(obj, 0, sizeof(*obj));\t\n+\n+\t/*\n+\t * we check if the file wants to be created containing a particular elf object\n+\t */\n+\tif (copy != NULL) {\n+\t\tmemcpy(obj, copy, sizeof(struct elfobj));\n+\t\tmemcpy(obj->mem, copy->mem, copy->size);\n+\t}\n+\tobj->load_flags = load_flags;\n+\tobj->path = path;\n+\n+\tif (load_flags & ELF_LOAD_F_MODIFY) {\n+\t\tmmap_flags = MAP_SHARED;\n+\t}\n+\tfd = open(path, open_flags, S_IRUSR | S_IRGRP | S_IROTH);\n+\tif (fd < 0) {\n+\t\telf_error_set(error, \"open: %s\", strerror(errno));\n+\t\treturn false;\n+\t}\n+\tobj->fd = fd;\n+\n+\tif (size != 0 && copy == NULL) {\n+\t\tobj->size = size;\n+\t\tmem = mmap(NULL, obj->size, mmap_perms, mmap_flags, fd, 0);\n+\t\tif (mem == MAP_FAILED) {\n+\t\t\telf_error_set(error, \"mmap: %s\", strerror(errno));\n+\t\t\tclose(fd);\n+\t\t\treturn false;\n+\t\t}\n+\t\tobj->mem = mem;\n+\t} else if (size == 0 && copy == NULL) {\n+\t\tfprintf(stderr, \"Invalid argument: size\\n\");\n+\t\treturn false;\n+\t}\n+\treturn true;\n+}\n+\n+/*\n+ * Writes a given elfobj_t instance to disk\n+ */\n+bool \n+elf_commit_object(struct elfobj *obj, size_t size, int offset, elf_error_t *error) \n+{\n+\tif (pwrite(obj->fd, obj->mem, size, offset) != size) {\n+\t\telf_error_set(error, \"pwrite: %s\", strerror(errno));\n+\t\treturn false;\n+\t}\n+\treturn true;\n+}\n+\n+/*\n+ * Handles several injection techniques.\n+ */\n+bool \n+elf_inject_code(struct elfobj *host, struct elfobj *target, uint64_t *payload_offset, \n+\t\tuint64_t injection_flags, elf_error_t *error) \n+{\n+\tbool injection_end;\n+\tuint8_t *dest_mem;\n+\tsize_t ehdr_size;\n+\tsize_t payload_size;\n+\telf_segment_iterator_t p_iter;\n+\telf_section_iterator_t s_iter;\n+\tstruct elf_segment segment;\n+\tstruct elf_section section;\n+\t\n+\tinjection_end = false;\n+\tpayload_size = PAGE_ALIGN_UP(target->size);\n+\tehdr_size = (host->e_class == ELFCLASS32) ? sizeof(Elf32_Ehdr) : sizeof(Elf64_Ehdr);\n+\t\n+\tif((dest_mem = (uint8_t *)calloc(1, host->size + payload_size)) == NULL) {\n+\t\telf_error_set(error, \"calloc: %s\", strerror(errno));\n+\t\treturn false;\n+\t}\n+\thost->data_offset = elf_data_offset(host);\n+\thost->text_offset = elf_text_offset(host);\n+\n+\tswitch(injection_flags) {\n+\t\tcase ELF_INJECT_F_POSTPEND: {\n+\t\t\tuint32_t poffset;\n+\n+\t\t\telf_segment_iterator_init(host, &p_iter);\n+\t\t\twhile (elf_segment_iterator_next(&p_iter, &segment) == ELF_ITER_OK) {\n+\t\t\t\tif(segment.type == PT_LOAD && segment.offset == host->data_offset) {\n+\t\t\t\t\tif (host->e_class == ELFCLASS32) {\n+\t\t\t\t\t\tElf32_Phdr *phdr = &host->phdr32[p_iter.index-1];\n+\t\t\t\t\t\tpoffset = phdr->p_offset + phdr->p_filesz;\n+\t\t\t\t\t\tphdr->p_memsz += payload_size;\n+\t\t\t\t\t\tphdr->p_filesz += payload_size;\n+\t\t\t\t\t\tphdr->p_flags |= PF_X;\n+\n+\t\t\t\t\t} else {\t\n+\t\t\t\t\t\tElf64_Phdr *phdr = &host->phdr64[p_iter.index-1];\n+\t\t\t\t\t\tpoffset = phdr->p_offset + phdr->p_filesz;\n+\t\t\t\t\t\tphdr->p_memsz += payload_size;\n+\t\t\t\t\t\tphdr->p_filesz += payload_size;\n+\t\t\t\t\t\tphdr->p_flags |= PF_X;\n+\t\t\t\t\t}\n+\t\t\t\t\tmemcpy(dest_mem, host->mem, host->size);\n+\t\t\t\t\tmemcpy(dest_mem + poffset, target->mem, target->size);\n+\t\t\t\t\t*payload_offset = poffset;\n+\t\t\t\t\thost->mem = dest_mem;\n+\t\t\t\t\thost->size += payload_size;\n+\t\t\t\t\tinjection_end = true;\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase ELF_INJECT_F_PREPEND: {\n+\t\t\telf_segment_iterator_init(host, &p_iter);\n+\t\t\twhile (elf_segment_iterator_next(&p_iter, &segment) == ELF_ITER_OK) {\n+\t\t\t\tif(segment.offset != host->text_offset) {\n+\t\t\t\t\tif (host->e_class == ELFCLASS32) {\n+\t\t\t\t\t\tElf32_Phdr *phdr = &host->phdr32[p_iter.index-1];\n+\t\t\t\t\t\tphdr->p_offset += payload_size;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tElf64_Phdr *phdr = &host->phdr64[p_iter.index-1];\n+\t\t\t\t\t\tphdr->p_offset += payload_size;\n+\t\t\t\t\t}\n+\t\t\t\t} else if(segment.offset == host->text_offset && segment.type == PT_LOAD){\n+\t\t\t\t\tif (host->e_class == ELFCLASS32) {\n+\t\t\t\t\t\tElf32_Phdr *phdr = &host->phdr32[p_iter.index-1];\n+\t\t\t\t\t\tphdr->p_vaddr -= payload_size;\n+\t\t\t\t\t\tphdr->p_paddr -= payload_size;\n+\t\t\t\t\t\tphdr->p_filesz += payload_size;\n+\t\t\t\t\t\tphdr->p_memsz += payload_size;\n+\t\t\t\t\t} else {\n+\t\t\t\t\t\tElf64_Phdr *phdr = &host->phdr64[p_iter.index-1];\n+\t\t\t\t\t\tphdr->p_vaddr -= payload_size;\n+\t\t\t\t\t\tphdr->p_paddr -= payload_size;\n+\t\t\t\t\t\tphdr->p_filesz += payload_size;\n+\t\t\t\t\t\tphdr->p_memsz += payload_size;\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\telf_section_iterator_init(host, &s_iter);\n+\t\t\twhile (elf_section_iterator_next(&s_iter, &section) == ELF_ITER_OK) {\n+\t\t\t\tif (host->e_class == ELFCLASS32) {\n+\t\t\t\t\tElf32_Shdr *shdr = &host->shdr32[s_iter.index-1];\n+\t\t\t\t\tshdr->sh_offset += payload_size;\n+\t\t\t\t} else {\n+\t\t\t\t\tElf64_Shdr *shdr = &host->shdr64[s_iter.index-1];\n+\t\t\t\t\tshdr->sh_offset += payload_size;\n+\t\t\t\t}\n+\t\t\t}\t\t\n+\t\t\tmemcpy(dest_mem, host->mem, ehdr_size);\n+\t\t\tmemcpy(dest_mem + ehdr_size, target->mem, target->size);\n+\t\t\tmemcpy(dest_mem + ehdr_size + payload_size, host->mem + ehdr_size, host->size - ehdr_size);\n+\t\t\t\n+\t\t\t*payload_offset = ehdr_size;\n+\t\t\thost->mem = dest_mem;\n+\t\t\thost->size += payload_size;\n+\t\t\tif (host->e_class == ELFCLASS32) {\n+\t\t\t\tElf32_Ehdr *ehdr = (Elf32_Ehdr*)host->mem;\n+\t\t\t\tehdr->e_phoff += payload_size;\n+\t\t\t\tehdr->e_shoff += payload_size;\n+\t\t\t} else {\n+\t\t\t\tElf64_Ehdr *ehdr = (Elf64_Ehdr*)host->mem;\n+\t\t\t\tehdr->e_phoff += payload_size;\n+\t\t\t\tehdr->e_shoff += payload_size;\n+\t\t\t}\n+\t\t\tinjection_end = true;\n+\t\t\tbreak;\t\n+\t\t}\n+\t\tcase ELF_INJECT_F_INTERPEND: {\n+\t\t\tsize_t code_size;\n+\t\t\tsize_t data_size;\n+\t\t\t\n+\t\t\telf_segment_iterator_init(host, &p_iter);\n+\t\t\twhile (elf_segment_iterator_next(&p_iter, &segment) == ELF_ITER_OK) {\n+\t\t\t\tif (segment.offset == host->text_offset && segment.type == PT_LOAD) {\n+\t\t\t\t\tif (host->e_class == ELFCLASS32) {\n+\t\t\t\t\t\tElf32_Phdr *phdr = &host->phdr32[p_iter.index-1];","path":"src/libelfmaster.c","position":280,"original_position":280,"commit_id":"c94acefb6503fd3d23874fb5bf6d2d9431ae6d8d","original_commit_id":"c94acefb6503fd3d23874fb5bf6d2d9431ae6d8d","user":{"login":"elfmaster","id":5854752,"node_id":"MDQ6VXNlcjU4NTQ3NTI=","avatar_url":"https://avatars1.githubusercontent.com/u/5854752?v=4","gravatar_id":"","url":"https://api.github.com/users/elfmaster","html_url":"https://github.com/elfmaster","followers_url":"https://api.github.com/users/elfmaster/followers","following_url":"https://api.github.com/users/elfmaster/following{/other_user}","gists_url":"https://api.github.com/users/elfmaster/gists{/gist_id}","starred_url":"https://api.github.com/users/elfmaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elfmaster/subscriptions","organizations_url":"https://api.github.com/users/elfmaster/orgs","repos_url":"https://api.github.com/users/elfmaster/repos","events_url":"https://api.github.com/users/elfmaster/events{/privacy}","received_events_url":"https://api.github.com/users/elfmaster/received_events","type":"User","site_admin":false},"body":"Make a blank line after this line before the line of code. And follow this whenever you define or declare a variable, always make sure there is a blank line before the next line of code. There are several places but I wont point them all out. Its an easy fix. Sorry to be a pain in the ass, I try to follow it to a tee myself.","created_at":"2019-01-04T04:48:17Z","updated_at":"2019-01-04T04:48:17Z","html_url":"https://github.com/elfmaster/libelfmaster/pull/9#discussion_r245203405","pull_request_url":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/9","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/comments/245203405"},"html":{"href":"https://github.com/elfmaster/libelfmaster/pull/9#discussion_r245203405"},"pull_request":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/9"}}},"pull_request":{"url":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/9","id":242158407,"node_id":"MDExOlB1bGxSZXF1ZXN0MjQyMTU4NDA3","html_url":"https://github.com/elfmaster/libelfmaster/pull/9","diff_url":"https://github.com/elfmaster/libelfmaster/pull/9.diff","patch_url":"https://github.com/elfmaster/libelfmaster/pull/9.patch","issue_url":"https://api.github.com/repos/elfmaster/libelfmaster/issues/9","number":9,"state":"open","locked":false,"title":"Feature/code injection","user":{"login":"ulexec","id":14844304,"node_id":"MDQ6VXNlcjE0ODQ0MzA0","avatar_url":"https://avatars2.githubusercontent.com/u/14844304?v=4","gravatar_id":"","url":"https://api.github.com/users/ulexec","html_url":"https://github.com/ulexec","followers_url":"https://api.github.com/users/ulexec/followers","following_url":"https://api.github.com/users/ulexec/following{/other_user}","gists_url":"https://api.github.com/users/ulexec/gists{/gist_id}","starred_url":"https://api.github.com/users/ulexec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ulexec/subscriptions","organizations_url":"https://api.github.com/users/ulexec/orgs","repos_url":"https://api.github.com/users/ulexec/repos","events_url":"https://api.github.com/users/ulexec/events{/privacy}","received_events_url":"https://api.github.com/users/ulexec/received_events","type":"User","site_admin":false},"body":"Implemented basic code injection support. This implies mainly 3 techniques\r\n    1 - Text segment padding injection\r\n    2 - Reverse text segment injection\r\n    3 - Data segment injection\r\nIt's also implemented  helper generic function to convert offset to addresses and vice-versa as-well as helper functions to open stubs from disk.","created_at":"2019-01-04T01:59:32Z","updated_at":"2019-01-04T04:48:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/9/commits","review_comments_url":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/9/comments","review_comment_url":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/comments{/number}","comments_url":"https://api.github.com/repos/elfmaster/libelfmaster/issues/9/comments","statuses_url":"https://api.github.com/repos/elfmaster/libelfmaster/statuses/c94acefb6503fd3d23874fb5bf6d2d9431ae6d8d","head":{"label":"elfmaster:feature/code_injection","ref":"feature/code_injection","sha":"c94acefb6503fd3d23874fb5bf6d2d9431ae6d8d","user":{"login":"elfmaster","id":5854752,"node_id":"MDQ6VXNlcjU4NTQ3NTI=","avatar_url":"https://avatars1.githubusercontent.com/u/5854752?v=4","gravatar_id":"","url":"https://api.github.com/users/elfmaster","html_url":"https://github.com/elfmaster","followers_url":"https://api.github.com/users/elfmaster/followers","following_url":"https://api.github.com/users/elfmaster/following{/other_user}","gists_url":"https://api.github.com/users/elfmaster/gists{/gist_id}","starred_url":"https://api.github.com/users/elfmaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elfmaster/subscriptions","organizations_url":"https://api.github.com/users/elfmaster/orgs","repos_url":"https://api.github.com/users/elfmaster/repos","events_url":"https://api.github.com/users/elfmaster/events{/privacy}","received_events_url":"https://api.github.com/users/elfmaster/received_events","type":"User","site_admin":false},"repo":{"id":71839044,"node_id":"MDEwOlJlcG9zaXRvcnk3MTgzOTA0NA==","name":"libelfmaster","full_name":"elfmaster/libelfmaster","private":false,"owner":{"login":"elfmaster","id":5854752,"node_id":"MDQ6VXNlcjU4NTQ3NTI=","avatar_url":"https://avatars1.githubusercontent.com/u/5854752?v=4","gravatar_id":"","url":"https://api.github.com/users/elfmaster","html_url":"https://github.com/elfmaster","followers_url":"https://api.github.com/users/elfmaster/followers","following_url":"https://api.github.com/users/elfmaster/following{/other_user}","gists_url":"https://api.github.com/users/elfmaster/gists{/gist_id}","starred_url":"https://api.github.com/users/elfmaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elfmaster/subscriptions","organizations_url":"https://api.github.com/users/elfmaster/orgs","repos_url":"https://api.github.com/users/elfmaster/repos","events_url":"https://api.github.com/users/elfmaster/events{/privacy}","received_events_url":"https://api.github.com/users/elfmaster/received_events","type":"User","site_admin":false},"html_url":"https://github.com/elfmaster/libelfmaster","description":"Secure ELF parsing/loading library for forensics reconstruction of malware, and robust reverse engineering tools","fork":false,"url":"https://api.github.com/repos/elfmaster/libelfmaster","forks_url":"https://api.github.com/repos/elfmaster/libelfmaster/forks","keys_url":"https://api.github.com/repos/elfmaster/libelfmaster/keys{/key_id}","collaborators_url":"https://api.github.com/repos/elfmaster/libelfmaster/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/elfmaster/libelfmaster/teams","hooks_url":"https://api.github.com/repos/elfmaster/libelfmaster/hooks","issue_events_url":"https://api.github.com/repos/elfmaster/libelfmaster/issues/events{/number}","events_url":"https://api.github.com/repos/elfmaster/libelfmaster/events","assignees_url":"https://api.github.com/repos/elfmaster/libelfmaster/assignees{/user}","branches_url":"https://api.github.com/repos/elfmaster/libelfmaster/branches{/branch}","tags_url":"https://api.github.com/repos/elfmaster/libelfmaster/tags","blobs_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/refs{/sha}","trees_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/trees{/sha}","statuses_url":"https://api.github.com/repos/elfmaster/libelfmaster/statuses/{sha}","languages_url":"https://api.github.com/repos/elfmaster/libelfmaster/languages","stargazers_url":"https://api.github.com/repos/elfmaster/libelfmaster/stargazers","contributors_url":"https://api.github.com/repos/elfmaster/libelfmaster/contributors","subscribers_url":"https://api.github.com/repos/elfmaster/libelfmaster/subscribers","subscription_url":"https://api.github.com/repos/elfmaster/libelfmaster/subscription","commits_url":"https://api.github.com/repos/elfmaster/libelfmaster/commits{/sha}","git_commits_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/commits{/sha}","comments_url":"https://api.github.com/repos/elfmaster/libelfmaster/comments{/number}","issue_comment_url":"https://api.github.com/repos/elfmaster/libelfmaster/issues/comments{/number}","contents_url":"https://api.github.com/repos/elfmaster/libelfmaster/contents/{+path}","compare_url":"https://api.github.com/repos/elfmaster/libelfmaster/compare/{base}...{head}","merges_url":"https://api.github.com/repos/elfmaster/libelfmaster/merges","archive_url":"https://api.github.com/repos/elfmaster/libelfmaster/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/elfmaster/libelfmaster/downloads","issues_url":"https://api.github.com/repos/elfmaster/libelfmaster/issues{/number}","pulls_url":"https://api.github.com/repos/elfmaster/libelfmaster/pulls{/number}","milestones_url":"https://api.github.com/repos/elfmaster/libelfmaster/milestones{/number}","notifications_url":"https://api.github.com/repos/elfmaster/libelfmaster/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/elfmaster/libelfmaster/labels{/name}","releases_url":"https://api.github.com/repos/elfmaster/libelfmaster/releases{/id}","deployments_url":"https://api.github.com/repos/elfmaster/libelfmaster/deployments","created_at":"2016-10-24T22:59:12Z","updated_at":"2019-01-04T04:47:38Z","pushed_at":"2019-01-04T01:59:33Z","git_url":"git://github.com/elfmaster/libelfmaster.git","ssh_url":"git@github.com:elfmaster/libelfmaster.git","clone_url":"https://github.com/elfmaster/libelfmaster.git","svn_url":"https://github.com/elfmaster/libelfmaster","homepage":"http://www.bitlackeys.org","size":1731,"stargazers_count":119,"watchers_count":119,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":16,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":16,"open_issues":2,"watchers":119,"default_branch":"master"}},"base":{"label":"elfmaster:master","ref":"master","sha":"56124ab4392e5a8108be6c84dac5a4b361b9daf2","user":{"login":"elfmaster","id":5854752,"node_id":"MDQ6VXNlcjU4NTQ3NTI=","avatar_url":"https://avatars1.githubusercontent.com/u/5854752?v=4","gravatar_id":"","url":"https://api.github.com/users/elfmaster","html_url":"https://github.com/elfmaster","followers_url":"https://api.github.com/users/elfmaster/followers","following_url":"https://api.github.com/users/elfmaster/following{/other_user}","gists_url":"https://api.github.com/users/elfmaster/gists{/gist_id}","starred_url":"https://api.github.com/users/elfmaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elfmaster/subscriptions","organizations_url":"https://api.github.com/users/elfmaster/orgs","repos_url":"https://api.github.com/users/elfmaster/repos","events_url":"https://api.github.com/users/elfmaster/events{/privacy}","received_events_url":"https://api.github.com/users/elfmaster/received_events","type":"User","site_admin":false},"repo":{"id":71839044,"node_id":"MDEwOlJlcG9zaXRvcnk3MTgzOTA0NA==","name":"libelfmaster","full_name":"elfmaster/libelfmaster","private":false,"owner":{"login":"elfmaster","id":5854752,"node_id":"MDQ6VXNlcjU4NTQ3NTI=","avatar_url":"https://avatars1.githubusercontent.com/u/5854752?v=4","gravatar_id":"","url":"https://api.github.com/users/elfmaster","html_url":"https://github.com/elfmaster","followers_url":"https://api.github.com/users/elfmaster/followers","following_url":"https://api.github.com/users/elfmaster/following{/other_user}","gists_url":"https://api.github.com/users/elfmaster/gists{/gist_id}","starred_url":"https://api.github.com/users/elfmaster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elfmaster/subscriptions","organizations_url":"https://api.github.com/users/elfmaster/orgs","repos_url":"https://api.github.com/users/elfmaster/repos","events_url":"https://api.github.com/users/elfmaster/events{/privacy}","received_events_url":"https://api.github.com/users/elfmaster/received_events","type":"User","site_admin":false},"html_url":"https://github.com/elfmaster/libelfmaster","description":"Secure ELF parsing/loading library for forensics reconstruction of malware, and robust reverse engineering tools","fork":false,"url":"https://api.github.com/repos/elfmaster/libelfmaster","forks_url":"https://api.github.com/repos/elfmaster/libelfmaster/forks","keys_url":"https://api.github.com/repos/elfmaster/libelfmaster/keys{/key_id}","collaborators_url":"https://api.github.com/repos/elfmaster/libelfmaster/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/elfmaster/libelfmaster/teams","hooks_url":"https://api.github.com/repos/elfmaster/libelfmaster/hooks","issue_events_url":"https://api.github.com/repos/elfmaster/libelfmaster/issues/events{/number}","events_url":"https://api.github.com/repos/elfmaster/libelfmaster/events","assignees_url":"https://api.github.com/repos/elfmaster/libelfmaster/assignees{/user}","branches_url":"https://api.github.com/repos/elfmaster/libelfmaster/branches{/branch}","tags_url":"https://api.github.com/repos/elfmaster/libelfmaster/tags","blobs_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/refs{/sha}","trees_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/trees{/sha}","statuses_url":"https://api.github.com/repos/elfmaster/libelfmaster/statuses/{sha}","languages_url":"https://api.github.com/repos/elfmaster/libelfmaster/languages","stargazers_url":"https://api.github.com/repos/elfmaster/libelfmaster/stargazers","contributors_url":"https://api.github.com/repos/elfmaster/libelfmaster/contributors","subscribers_url":"https://api.github.com/repos/elfmaster/libelfmaster/subscribers","subscription_url":"https://api.github.com/repos/elfmaster/libelfmaster/subscription","commits_url":"https://api.github.com/repos/elfmaster/libelfmaster/commits{/sha}","git_commits_url":"https://api.github.com/repos/elfmaster/libelfmaster/git/commits{/sha}","comments_url":"https://api.github.com/repos/elfmaster/libelfmaster/comments{/number}","issue_comment_url":"https://api.github.com/repos/elfmaster/libelfmaster/issues/comments{/number}","contents_url":"https://api.github.com/repos/elfmaster/libelfmaster/contents/{+path}","compare_url":"https://api.github.com/repos/elfmaster/libelfmaster/compare/{base}...{head}","merges_url":"https://api.github.com/repos/elfmaster/libelfmaster/merges","archive_url":"https://api.github.com/repos/elfmaster/libelfmaster/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/elfmaster/libelfmaster/downloads","issues_url":"https://api.github.com/repos/elfmaster/libelfmaster/issues{/number}","pulls_url":"https://api.github.com/repos/elfmaster/libelfmaster/pulls{/number}","milestones_url":"https://api.github.com/repos/elfmaster/libelfmaster/milestones{/number}","notifications_url":"https://api.github.com/repos/elfmaster/libelfmaster/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/elfmaster/libelfmaster/labels{/name}","releases_url":"https://api.github.com/repos/elfmaster/libelfmaster/releases{/id}","deployments_url":"https://api.github.com/repos/elfmaster/libelfmaster/deployments","created_at":"2016-10-24T22:59:12Z","updated_at":"2019-01-04T04:47:38Z","pushed_at":"2019-01-04T01:59:33Z","git_url":"git://github.com/elfmaster/libelfmaster.git","ssh_url":"git@github.com:elfmaster/libelfmaster.git","clone_url":"https://github.com/elfmaster/libelfmaster.git","svn_url":"https://github.com/elfmaster/libelfmaster","homepage":"http://www.bitlackeys.org","size":1731,"stargazers_count":119,"watchers_count":119,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":16,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":16,"open_issues":2,"watchers":119,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/9"},"html":{"href":"https://github.com/elfmaster/libelfmaster/pull/9"},"issue":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/issues/9"},"comments":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/issues/9/comments"},"review_comments":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/9/comments"},"review_comment":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/pulls/9/commits"},"statuses":{"href":"https://api.github.com/repos/elfmaster/libelfmaster/statuses/c94acefb6503fd3d23874fb5bf6d2d9431ae6d8d"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"elfmaster"}}