• Title/Summary/Keyword: 소프트웨어 역공학

Search Result 87, Processing Time 0.026 seconds

The Constructing & Visualizing Practices in Effective Static Analyzer for analyzing the Quality of Object Oriented Source Code (객체지향 코드 품질 분석을 위한 효율적인 정적분석기 개발 및 가시화 사례)

  • Lee, Won Young;Moon, So Young;Kim, R. Young Chul
    • Proceedings of the Korea Information Processing Society Conference
    • /
    • 2019.10a
    • /
    • pp.704-707
    • /
    • 2019
  • 오늘날 객체지향 코드 내부 복잡도가 지속적으로 증가하는 데에 반해 IT 벤처/중소기업에서는 요구사항 및 설계문서 미비의 코드 개발과 테스트 중심의 경우가 빈번하다. 이는 시스템의 코드를 이해하고 수정, 유지보수를 하는데 많은 시간과 비용이 투자되고 있다. 본 연구는 객체지향 코드의 내부 구조 시각화를 위해 Tool-Chain방법을 이용한 정적 분석기 구축 및 가시화를 제안 한다. 이를 통해, 역공학 도구, 테스트 프로세스 등을 도입이 어려운 중소기업의 소프트웨어 품질 향상에 도움을 줄 수 있을 것으로 기대된다.

A Design and Implementation of Variable Reference Graph (Variable Reference Graph 의 설계 및 구현)

  • Lee, Heon-Ki;Lee, Mun-Su;Shin, Gyu-Sang
    • Proceedings of the Korea Information Processing Society Conference
    • /
    • 2000.04a
    • /
    • pp.815-820
    • /
    • 2000
  • Variable Reference Graph 는 C 언어로 작성된 프로그램으로부터 상호 절차적인 자료 흐름 분석 정보를 수평적 방향 그래프(directed graph)로 자동 생성해주는 역공학(reverse engineering) 도구들 중 하나이다. 본 논문에서는 판독성 있는 구조적 정보를 제공하기위한 그래픽 표현의 전략을 바탕으로 JAVA 로 구현된 그래픽 사용자 인터페이스(graphic user interface) 및 그래프 레이아웃 알고리즘(graph layout algorithm)을 기술한다. 이 알고리즘은 4 단계로 구성되어 있다: 정보 모형, 레벨 알고리즘, 순서 알고리즘, 위치 알고리즘. 각 단계별에서 수행되는 주요 알고리즘을 살펴 본다. 특히, 이 알고리즘들은 사이클(cycle) 및 비사이클(acyclic) 방향 그래프, 그리고 트리(tree)를 수평적 계층 구조를 생성하는데 사용될 수 있다. 본 논문에서 구현된 Variable Reference Graph 는 소프트웨어 재공학 도구를 개발하는 RESORT(RESearch on object-oriented SOftware Reengineering Technology) 과제에서 개발되었다.

  • PDF

Analysis of a Security Vulnerability of URL Attack on Apache Web Server (아파치 웹서버의 URL 공격에 대한 보안취약성 분석)

  • Choi, Jong-Cheon;Choi, Jin-Woo;Cho, Seong-Je
    • Proceedings of the Korea Information Processing Society Conference
    • /
    • 2004.05a
    • /
    • pp.1027-1030
    • /
    • 2004
  • 본 논문에서는 기계어 프로그램만 주어진 환경에서 디버깅 및 역공학 도구를 사용하여 소프트웨어 보안취약성을 분석하는 방법에 대한 연구를 수행하였다. 즉, MS사의 윈도우즈 2000 서버 운영체제 상에서 아파치(Apache) 웹서버를 대상으로, URL 공격에 대한 한 취약성을 재연하고, 취약점이 있는 코드 부분을 추출하였다. 이는 기계어 프로그램을 실행하면서 보안 취약성 분석 절차를 이해하고 보안 결함을 발견해 내는 기반 자료로 활용될 수 있을 것이다.

  • PDF

Design of Source Code Obfuscation Tool based LLVM to improve security in Embedded System (임베디드 시스템의 보안성 향상을 위한 LLVM 기반의 소스코드 난독화 도구 설계)

  • Ha, Jae-Hyun;Kawk, Donggyu
    • Proceedings of the Korea Information Processing Society Conference
    • /
    • 2022.11a
    • /
    • pp.201-203
    • /
    • 2022
  • 임베디드 시스템이 일상생활 및 각종 산업에 밀접하게 연관되어 개인 정보 및 국가 기술 등 지적 자산에 대한 보안의 필요성이 나타나고 있다. 이러한 문제점은 임베디드 시스템에 들어가는 소프트웨어의 역공학으로부터 초래된다. 따라서 본 논문은 소스 코드에 대해 제어 흐름 평탄화라는 난독화 알고리즘을 설계하는 방법을 제안한다. 이는 독자적으로 작성된 난독화 알고리즘이기 때문에 오픈 소스로 공개되어져 있는 다른 난독화 도구들에 비해 안전한 특징을 가진다. 제어 흐름 평탄화는 프로그램의 기능을 유지하면서 소스 코드의 정적 분석을 어렵게 하는 기법으로, 데이터를 탈취하려는 악의적인 행위를 사전에 예방할 수 있다. 본 논문에서 제안하는 제어 흐름 평탄화 알고리즘은 하나의 기본 블록으로 이루어진 단순한 소스 코드를 여러 개의 기본 블록으로 분할하고, 조건문을 통해 연결하는 방법을 사용하여 알고리즘의 복잡도를 높였다. 이처럼 새롭게 작성된 Pass를 통해 소스코드 난독화를 적용시켜 임베디드 시스템의 보안성을 향상시킬 수 있다.

A Case Study on Improving SW Quality through Software Visualization (소프트웨어 가시화를 통한 품질 개선 사례 연구)

  • Park, Bo Kyung;Kwon, Ha Eun;Son, Hyun Seung;Kim, Young Soo;Lee, Sang-Eun;Kim, R. Young Chul
    • Journal of KIISE
    • /
    • v.41 no.11
    • /
    • pp.935-942
    • /
    • 2014
  • Today, it is very important issue to high quality of software issue on huge scale of code and time-to-market. In the industrial fields still developers focuses on Code based development. Therefore we try to consider two points of views 1) improving the general developer the bad development habit, and 2) maintenance without design, documentation and code visualization. To solve these problems, we need to make the code visualization of code. In this paper, we suggest how to visualize the inner structure of code, and also how to proceed improvement of quality with constructing the Tool-Chain for visualizing Java code's inner structure. For our practical case, we applied Object Code with NIPA's SW Visualization, and then reduced code complexity through quantitatively analyzing and visualizing code based on setting the basic module unit, the class of object oriented code.

A Program Analysis Technique for Recovery of Layered Architecture and Conformance Checking (층위구조 아키텍처의 복구 및 일치성 검사를 위한 프로그램 분석 방법)

  • Park Chanjin;Hong Euyseok;Kang Yoohoon;Wu Chisu
    • Journal of KIISE:Software and Applications
    • /
    • v.32 no.8
    • /
    • pp.730-741
    • /
    • 2005
  • Layered Architecture is a kind of nodule decomposition techniques, which decomposes a program by generality This paper proposes a ]aver based method for recovering layered architecture from object-oriented program and checking conformance against architectural document. To specify the rules for layered style in object-oriented program, we define a partially ordered set on modules by module use relationship and module layer relationship by module override relationship. The meaning of module layer relationship is explained with an example from design patterns. Steps to recover layered architecture from program are described and a metamodel for the recovery is proposed. Architecture recovery is performed on source codes from open-source software project, and the implication of parts that do not conform to its architectural document is discussed. As a result of checking, it is pointed out that, although the parts are considered allowable exceptions of layered architecture, their modifications should be controlled carefully.

A Practical Study on Code Static Analysis through Open Source based Tool Chains (Open Source 기반 툴 체인화를 통한 코드 정적 분석 연구)

  • Kang, Geon-Hee;Kim, R. Young Chul;Yi, Geun Sang;Kim, Young Soo;Park, Yong. B.;Son, Hyun Seung
    • KIISE Transactions on Computing Practices
    • /
    • v.21 no.2
    • /
    • pp.148-153
    • /
    • 2015
  • In our domestic software industries, it is focused on such a high quality development/ testing process, maturity measurement, and so on. But the real industrial fields are still working on a code-centric development. Most of the existing legacy systems did not keep the design and highly increased the code complexity with more patching of the original codes. To solve this problem, we adopt a code visualization technique which is important to reduce the code complexity among modules. To do this, we suggest a tool chaining method based on the existing open source software tools, which extends NIPA's Software Visualization techniques applied to procedural languages. In addition, it should be refactored to fix bad couplings of the quality measurement indicators within the code visualization. As a result, we can apply reverse engineering to the legacy code, that is, from programming via model to architecture, and then make high quality software with this approach.

A Technique for Protecting Android Applications using Executable Code Encryption and Integrity Verification (실행코드 암호화 및 무결성 검증을 적용한 안드로이드앱 보호 기법)

  • Shim, HyungJoon;Cho, Sangwook;Jeong, Younsik;Lee, Chanhee;Han, Sangchul;Cho, Seong-je
    • Journal of Software Assessment and Valuation
    • /
    • v.10 no.1
    • /
    • pp.19-26
    • /
    • 2014
  • In this paper, we propose a method for protecting Android applications against reverse engineering attacks. In this method, the server encrypts the original executable code (DEX) included in an APK file, inserts into the APK file a stub code that decrypts the encrypted DEX later at run-time, and distributes the modified APK file. The stub code includes an integrity validation code to detect attacks on itself. When a user installs and executes the APK file, the stub code verifies the integrity of itself, decrypts the encrypted DEX, and loads it dynamically to execute. Since the original DEX is distributed as an encrypted one, we can effectively protect the intellectual property. Further, by verifying the integrity of the stub code, we can prevent malicious users from bypassing our method. We applied the method to 15 Android apps, and evaluated its effectiveness. We confirmed that 13 out of them operates normally.

포렌식 관점에서 차세대 파일시스템 연구 동향

  • Hwang, Hyunuk;Oh, Junghoon;Lee, Seungyong;Kim, Kibom;Sohn, Kiwook
    • Review of KIISC
    • /
    • v.29 no.6
    • /
    • pp.13-22
    • /
    • 2019
  • 기존의 NTFS, HFS+, Ext4와 같은 전통적인 파일시스템들은 디스크 사용, 공간 관리, 데이터 암호화 등 여러 측면에서 한계점을 가지고 있었다. 특히 디스크 사용 측면에서 기본적으로 단일 디스크 안에서 동작하도록 설계되었기 때문에 여러 개의 디스크에서 동작하도록 하려면 RAID와 같은 별도의 구성이 필요했다. 이에 따라 주요 운영체제들은 위와 같은 기존 파일시스템들의 한계점들을 극복하도록 설계된 Pooled Storage 파일시스템들을 공개하였다. Pooled Storage 파일시스템에 관한 연구는 2017년 여름 미국 오스틴에서 열린 DFRWS 학회에서 독일의 Jan-Niclas Hilgert에 의해 발표된 이후 디지털 포렌식 학계 및 산업계에서 집중적인 연구개발이 진행되고 있다. 2017년 Hilgert는 ZFS 파일시스템에 대한 분석기능을 공개소프트웨어인 SleuthKit에 추가한 기술을 발표하였고, 2018년 DFRWS에서는 BtrFS 파일시스템에 대한 분석기능을 공개하였다. BlackBag Technologies의 Joe Syle은 APFS 파일시스템에 대한 분석기능을 SleuthKit에 추가한 결과를 DFRWS 2018에서 발표하였다. 노르웨이의 Rune Nordvik은 2019년 DFRWS에서 REFS를 역공학을 통하여 분석한 결과를 공개하였다. 국내에서는 고려대학교를 중심으로 ReFS에 대한 연구가 진행 중이다. 본 논문에서는 주요 운영체제들이 공개한 Pooled Storage 파일시스템 형태의 차세대 파일시스템인 ReFS, APFS, BtrFS를 소개하고 각 파일시스템의 특징과 주요 기능들을 설명한다.

A Extraction of Multiple Object Candidate Groups for Selecting Optimal Objects (최적합 객체 선정을 위한 다중 객체군 추출)

  • Park, Seong-Ok;No, Gyeong-Ju;Lee, Mun-Geun
    • Journal of KIISE:Software and Applications
    • /
    • v.26 no.12
    • /
    • pp.1468-1481
    • /
    • 1999
  • didates.본 논문은 절차 중심 소프트웨어를 객체 지향 소프트웨어로 재/역공학하기 위한 다단계 절차중 첫 절차인 객체 추출 절차에 대하여 기술한다. 사용한 객체 추출 방법은 전처리, 기본 분할 및 결합, 정제 결합, 결정 및 통합의 다섯 단계로 이루어진다 : 1) 전처리 과정에서는 객체 추출을 위한 FTV(Function, Type, Variable) 그래프를 생성/분할 및 클러스터링하고, 2) 기본 분할 및 결합 단계에서는 다중 객체 추출을 위한 그래프를 생성하고 생성된 그래프의 정적 객체를 추출하며, 3) 정제 결합 단계에서는 동적 객체를 추출하며, 4) 결정 단계에서는 영역 모델링과 다중 객체 후보군과의 유사도를 측정하여 영역 전문가가 하나의 최적합 후보를 선택할 수 있는 측정 결과를 제시하며, 5) 통합 단계에서는 전처리 과정에서 분리된 그래프가 여러 개 존재할 경우 각각의 처리된 그래프를 통합한다. 본 논문에서는 클러스터링 순서가 고정된 결정론적 방법을 사용하였으며, 가능한 경우의 수에 따른 다중 객체 후보, 객관적이고 의미가 있는 객체 추출 방법으로의 정제와 결정, 영역 모델링을 통한 의미적 관점에 기초한 방법 등을 사용한다. 이러한 방법을 사용함으로써 전문가는 객체 추출 단계에서 좀더 다양하고 객관적인 선택을 할 수 있다.Abstract This paper presents an object extraction process, which is the first phase of a methodology to transform procedural software to object-oriented software. The process consists of five steps: the preliminary, basic clustering & inclusion, refinement, decision and integration. In the preliminary step, FTV(Function, Type, Variable) graph for object extraction is created, divided and clustered. In the clustering & inclusion step, multiple graphs for static object candidate groups are generated. In the refinement step, each graph is refined to determine dynamic object candidate groups. In the decision step, the best candidate group is determined based on the highest similarity to class group modeled from domain engineering. In the final step, the best group is integrated with the domain model. The paper presents a new clustering method based on static clustering steps, possible object candidate grouping cases based on abstraction concept, a new refinement algorithm, a similarity algorithm for multiple n object and m classes, etc. This process provides reengineering experts an comprehensive and integrated environment to select the best or optimal object candidates.