KR101935847B1 - 컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템 - Google Patents

컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템 Download PDF

Info

Publication number
KR101935847B1
KR101935847B1 KR1020187003236A KR20187003236A KR101935847B1 KR 101935847 B1 KR101935847 B1 KR 101935847B1 KR 1020187003236 A KR1020187003236 A KR 1020187003236A KR 20187003236 A KR20187003236 A KR 20187003236A KR 101935847 B1 KR101935847 B1 KR 101935847B1
Authority
KR
South Korea
Prior art keywords
binary
modification
software application
instruction
application binary
Prior art date
Application number
KR1020187003236A
Other languages
English (en)
Other versions
KR20180017211A (ko
Inventor
크리스 휴스
아담 슈로더
루크 미첼
Original Assignee
인핸스 인코퍼레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인핸스 인코퍼레이티드 filed Critical 인핸스 인코퍼레이티드
Publication of KR20180017211A publication Critical patent/KR20180017211A/ko
Application granted granted Critical
Publication of KR101935847B1 publication Critical patent/KR101935847B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

소프트웨어 애플리케이션의 기능을 보강하기 위해 추가 소프트웨어 코드를 구현하도록 컴파일링된 소프트웨어 애플리케이션을 수정하는 시스템 및 방법이 개시된다. 이 시스템 및 방법은 소프트웨어 애플리케이션 바이너리(601), 메타데이터(602), 및 수정 옵션(603)을 수신하는 단계, 수신된 컴포넌트들을 분석하는 단계, 분석을 기초로 소프트웨어 애플리케이션 바이너리를 수정하는 단계, 및 수정된 소프트웨어 애플리케이션 바이너리(610)를 반환하는 단계를 포함한다.

Description

컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템
본 발명은 컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 시스템 및 방법에 관한 것이다.
웹 및 모바일 애플리케이션 회사들은 종종 그들의 제품에 기능을 추가하기 위해 제3자 서비스에 의존한다. 이러한 제3자 서비스는 일반적으로 소프트웨어 개발자 키트(SDK), 애플리케이션 프로그래밍 인터페이스(API), 소프트웨어 라이브러리 또는 다른 소프트웨어 코드의 형태로 소프트웨어 코드를 구현할 것을 필요로 한다. 이러한 제3자 서비스가 웹 또는 모바일 애플리케이션의 사용자의 즐거움을 드라마틱하게 강화할 수 있고, 그것들을 구현한 회사에 상당한 가치(즉, 광고 수입, 향상된 사용자 기능, 강화된 고객 지원)를 제공하기도 하지만, 제3자 코드를 설치하는 부담은 웹 및 모바일 애플리케이션 회사 자신들의 책임이다. 회사 직원(전형적으로, 내부 개발자)이 단일 제3자 SDK의 수동 구현을 정확하게 수행하기 위해서는 수 시간 또는 심지어 수 일이 걸릴 수 있다. 내부 개발자는 먼저 수 많은 선택지 중에서(예컨대, 수 십가지의 경쟁 모바일 및 네트워크로부터) 그가 사용하고자 하는 적절한 제3자 서비스를 파악하고, 친숙하지 않은 제3자 SDK를 이용하기 위해 설치 명령을 제공하는 연관된 지원 매뉴얼을 읽은 후, 웹 또는 모바일 애플리케이션 소스 코드에 SDK를 직접 설치해야 한다. 이러한 프로세스는 관리 측면에서 부담스럽고, 설치 프로세스가 정확하게 행해졌고 웹 또는 모바일 애플리케이션을 의도하지 않게 손상시키지 않았음을 보장하기 위해 지루한 품질 보증 및 테스트 과정을 필요로 한다. 예를 들어, 온라인 광고를 통해 수입을 얻고자 하지만 자신의 광고 네트워크 시스템을 구축할 리소스 또는 시간을 가지지 못한 웹 또는 모바일 회사는 자신의 웹 또는 모바일 앱에 제3자 광고 네트워크 SDK를 설치해야 할 것이다. 이 SDK는 웹 또는 모바일 애플리케이션에서 광고를 실행할 것이고, 그 회사에 광고 수입을 제공할 것이다.
제3자 서비스 제공자는 정기적으로 그들의 SDK를 업데이트한다. 회사가 제3자 서비스의 최신 피처 및 기능을 이용하고자 한다면, 그 회사는 업데이트된 SDK를 자신의 웹 또는 모바일 애플리케이션에 구현해야 한다. 이것은 간단하고 신속한 프로세스가 아니다. 웹 또는 모바일 애플리케이션은 숙련된 개발자가 작업해야 하고, 이는 잠재적으로 업무에 지장을 줄 수 있다. 오래된 SDK는 제거되어야 하고, 요구되는 기술과 경험을 갖춘 누군가에 의해 업데이트된 SDK가 설치되고 테스트되어야 한다. 복수의 제3자 SDK를 가진 성공적인 회사는 이러한 프로세스를 관리하기 위해 한 팀의 풀 타임 내부 개발자를 채용해야 할 수 있다. 이러한 이유로, 많은 웹 및 모바일 애플리케이션 개발자들은 그러한 이유가 없었다면 바람직했을 제3자 서비스를 이용하는 것을 그저 꺼리고 있다. 최선의 제3자 서비스를 파악하고, 다양한 최초 SDK 설치를 관리하고, SDK 업데이트가 이용 가능할 때를 추적하고, 힘든 설치 및 테스트 프로세스를 재수행하는 부담은 소기업이 감당할 수 없을 수 있다. 실제로, 새로운 업데이트되는 SDK의 쇄도(deluge)를 처리하는 것에 대한 새로운 용어, 'SDK 피로'가 생겨나기도 했다.
제3자 시스템을 구현하는 것과 관련된 비용은 개발자에게 엄청나게 높을 수 있고, 특히, 그의 니드에 적합한 것을 선택하기 전에 그가 평가해야 할 다수의 제3자 서비스를 고려할 때 그러하다. 예를 들어, 개발자는 캐쥬얼 게임 또는 소셜 네트워킹 애플리케이션과 같은, 그의 특정 애플리케이션을 위해 가장 잘 작동하는 것을 찾기 전에, 수 십개의 제3자 광고 네트워크를 테스트할 필요가 있을 수 있다. SDK 구현 및 지속적인 관리 프로세스는 많은 웹 및 모바일 애플리케이션 회사에게 매우 시간 소모적이고 힘들기 때문에, 그들은 그저 이러한 가치 있는 제3자 서비스의 사용을 제한하게 된다. 그 결과, 이러한 회사들은 그들의 고객에게 제공할 수 있는 혁신적인 새로운 서비스 및 가치 증가적인 매출 기회를 놓치고 있다.
그러므로, 컴파일링된 소프트웨어 애플리케이션을 획득하고, 그것을 개발자가 그의 웹 또는 모바일 애플리케이션에 가장 적합한 최선의 제3자 서비스를 평가할 필요 없이 수정하고, 그리고 그의 웹 또는 모바일 애플리케이션의 소스 코드에 제3자 소프트웨어 코드(SDK, API)를 수동적으로 삽입하는 부담 없이 그렇게 하기 위한 방법에 대한 필요성이 존재한다. 또한, 통상적으로 각각의 서비스에 대하여 SDK를 수동으로 구현하는 것과 연관된 문제점 및 업무 방해없이, 개발자가 다수의 잠재적으로 가치 있는 제3자 서비스를 쉽게 테스트 하는 것을 가능하게 하는 방법, 및 웹 및 모바일 애플리케이션 회사들이 앱 구매에서, 광고, 분석, 사용자 조사, 충돌 리포팅, 개발자 도구, 라이브러리, 앱 등급 프롬프트, 혁신적인 프로모션 기회와 같은 그들의 제품 및 서비스 기능을 강화하기 위한 다수의 제3자 서비스를 신속하게 평가 및 구현하는 것을 가능하게 하는 것, 및 그것이 클라이언트 장치 상의 하드웨어를 적절하게 이용할 수 있도록 애플리케이션을 수정하는 것에 대한 필요성이 존재한다. 뿐만 아니라, 웹 또는 모바일 애플리케이션 내에 이전에설치된 SDK에 의해 수행되는 기존의 기능들이 새로운 또는 더 많은 최적의 목적으로 전용되는 것을 가능하게 하기 위한 방법에 대한 필요성이 존재한다. 뿐만 아니라, iOS, 안드로이드, HTML5, C 및 C+, 및 플래시와 같은, 다양한 포맷, 운영체제 및 프로그래밍 언어에서 이러한 수정을 수행할 수 있는 방법에 대한 필요성이 존재한다.
본 발명은 소프트웨어 애플리케이션의 기능을 강화하기 위해 추가적인 소프트웨어 코드를 구현하기 위해 컴파일링된 소프트웨어 애플리케이션을 수정하기 위한 시스템 및 방법에 관한 것이다. 이 시스템 및 방법은 소프트웨어 애플리케이션 바이너리(binary) 및 수정 옵션을 수신하는 단계, 수정 옵션을 기초로 소프트웨어 애플리케이션 바이너리를 수정하는 단계, 소프트웨어 애플리케이션 바이너리를 컴파일링하는 단계, 및 수정된 소프트웨어 애플리케이션 바이너리를 사용 가능한 포맷으로 반환하는 단계를 포함한다.
본 발명의 목적은 소프트웨어 애플리케이션 바이너리, 수정 옵션, 및 기계 명령어의 수정이 바이너리 레벨에서 필요한지 판정하기 위한 메타 데이터, 어셈블리 레벨 및/또는 소스 코드 레벨을 분석하는 것이고, 수정 프로세스를 간소화하기 위해 요구되는 레벨에서 수정을 자동으로 수행하는 것이다.
도 1은 본 발명의 실시예에 따른 웹 서비스 및 수정 서비스를 포함하는 소프트웨어 수정 시스템의 호출 다이어그램이다.
도 2는 소프트웨어 수정 시스템의 실시예에 의해 수정되기 전의 컴퓨팅 장치 상에서 실행 중인 소프트웨어 애플리케이션을 보여준다.
도 3은 소프트웨어 수정 시스템의 실시예에 의해 수정된 후의 컴퓨팅 장치 상에서 실행 중인 소프트웨어 애플리케이션을 보여준다.
도 4는 본 발명의 실시예에 따른 웹 서비스의 예시적인 컴퓨터 구현방법을 보여준다.
도 5는 본 발명의 실시예에 따른 웹 서비스 상에 제공되는 수정 옵션들의 예시적인 컴퓨터 구현방법을 보여준다.
도 6은 본 발명의 실시예에 따른 소프트웨어 수정 서비스 프로세스의 예시적인 흐름도를 보여준다.
도 7은 본 발명의 실시예에 따른 소프트웨어 수정 시스템 프로세스의 예시적인 흐름도를 보여준다.
도 8은 본 발명의 실시예에 따른 소프트웨어 수정 시스템 프로세스의 예시적인 흐름도를 보여준다.
도 9는 본 발명의 실시예에 따른 소프트웨어 수정 시스템 프로세스의 예시적인 흐름도를 보여준다.
도 10은 어느 실시예에서 본 발명의 다양한 형태를 구현하기 위해 사용될 수 있는 컴퓨터의 하이레벨 도면을 도시한다.
첨부된 도면과 연관지어 아래에 서술된 상세한 설명들은 본 발명의 현재의 바람직한 실시예들의 설명으로서 의도되었고, 본 발명이 그러한 형태로만 구성되거나 사용되는 것을 나타내도록 의도된 것은 아니다. 이 설명은 도시된 실시예와 관련지어 본 발명을 구성하고 실시하기 위한 기능 및 일련의 단계들을 서술한다. 그러나, 동일하거나 동등한 기능 및 시퀀스가 상이한 실시예에 의해 달성될 수도 있으며, 그것 또한 본 발명의 정신 및 범위 내에 포함되도록 의도되었다.
용어 제1, 제2 등이 다양한 엘리먼트들을 설명하기 위해 여기서 사용될 수 있으나, 이러한 엘리먼트들이 그러한 용어들에 의해 제한되지 않아야 함이 이해될 것이다. 이러한 용어들은 단지 하나의 엘리먼트를 다른 엘리먼트와 구별하기 위해 사용된 것일 뿐이다. 예를 들어, 본 발명의 정신을 벗어나지 않고, 제1 제스처가 제2 제스처로 칭해질 수도 있고, 이와 마찬가지로, 제2 제스처가 제1 제스처로 칭해질 수도 있다.
여기서 본 발명의 설명에 사용된 용어들은 단지 특정 실시예를 설명할 목적일 뿐이고, 본 발명을 제한하도록 의도된 것이 아니다. 본 발명의 설명 및 첨부된 청구항에서 사용된 바와 같이, 단수 형태 "하나", "하나의" 및 "그"은 문맥에 명백하게 다르게 표시되지 않았다면, 복수의 형태도 포함하는 것으로 의도되었다. 또한, 여기 사용된 용어 "및/또는"이 하나 이상의 연관되어 나열된 항목들의 임의의 모든 가능한 조합을 포함하는 것을 의미함이 이해될 것이다. 또한, 용어 "포함하다" 및/또는 "포함하는"는 본 명세서에서 사용된 경우 언급된 피처, 정수, 단계, 동작, 엘리먼트 및/또는 컴포넌트의 존재를 명시하고, 하나 이상의 다른 피처, 정수, 단계, 동작, 엘리먼트, 컴포넌트 및/또는 그 그룹들의 존재 또는 추가를 배재하는 것이 아님이 이해될 것이다.
용어, 소프트웨어 애플리케이션 바이너리는 2진 포맷의 컴퓨터 애플리케이션을 의미한다. 소프트웨어 애플리케이션 바이너리는 적절한 프로그램을 이용하여 판독될 수 있고, 또는 애셋(asset)을 드러내기 위해 추출될 수도 있다. 소프트웨어 애플리케이션 바이너리, 소프트웨어 애플리케이션, 컴파일링된 소프트웨어 애플리케이션 및 컴퓨터 애플리케이션이 상호 치환 가능하게 사용될 수 있음을 이해해야 한다.
컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 소프트웨어는 희망의 수정 옵션과 함께 컴퓨터 애플리케이션을 수신하고, 어떤 레벨에서 그 컴퓨터 애플리케이션을 수정할 것인지 판정하기 위해 컴퓨터 애플리케이션을 분석하고, 희망의 레벨(들)에서 컴퓨터 애플리케이션을 수정하고, 그리고 수정된 컴퓨터 애플리케이션을 반환하는 소프트웨어 모듈을 포함한다. 이 방법은 프로그래머가 소스 코드 내에 수정사항을 직접 집어넣는(embedding) 것과 달리, 바이너리 레벨에서 시작하고 오직 필요할 때만 어셈블리 코드 또는 소스 코드 내에서 수정을 수행함으로써 수정 프로세스를 간소화한다.
도면은 컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템의 한 실시예를 도시한다. 도시된 실시예가 본 발명의 다양한 기능을 설명하기 위해 웹 서비스(100) 및 수정 서비스(101)를 포함하지만, 본 발명이 단일 컴퓨팅 장치, 또는 공적 및/또는 사적 네트워크 상의 복수의 컴퓨팅 장치와 같은, 임의의 다수의 구성으로 구현될 수 있음을 이해해야 한다. 이러한 예시적인 실시예에서, 웹 서비스(100)와 같은 사용자 인터페이스는 소프트웨어 애플리케이션 바이너리(102)를 수집 및 저장하고, 수정 및 메타데이터에 관한 정보와 같은, 요청 정보(103)를 수집 및 저장하고, 수정된 애플리케이션 및 메타데이터(107)를 저장하고, 수정된 애플리케이션을 사용자(108)에게 반환하는데 사용된다. 수정 서비스(101)는 애플리케이션을 수정하는데, 이는 소프트웨어 애플리케이션(104)을 분석하고, 소프트웨어 애플리케이션(105) 상에서 수정을 수생하고, 애플리케이션(106)을 서명/마감처리하는 것을 포함한다.
몇몇 실시예에서, 웹 서비스(100)와 같은 사용자 인터페이스는 시스템과의 클라이언트 상호작용을 위한 게이트웨이로서 역할하는 하나 이상의 공개적으로 액세스 가능한 웹 서버 상에 서장될 수 있다. 하나 이상의 공개적으로 액세스 가능한 웹 서버는 가상 컴퓨팅 및/또는 저장 리소스를 포함할 수 있고, 복수의 서비스를 제공할 수도 있다. 예를 들어, 하나 이상의 서버는 사용자가 컴퓨터 애플리케이션을 수정하기 위해 시스템을 등록하고/액세스하는 보안 기능을 제공할 수 있다. 몇몇 실시예에서, 시스템이 컴퓨터 애플리케이션에 액세스하고 및/또는 그것을 교체하기 위해, 사용자는 또한 컴퓨터 애플리케이션을 시스템에 제출하기 위해 또는 구글 스토어(Google® Store) 또는 애플 앱 스토어(Apple® App)와 같은 마켓플레이스에 액세스하기 위해 추가 보안 증명서를 제출하도록 요구받을 수 있다. 또한, 하나 이상의 서버는 사용자 인터페이스, 및/또는 네트워크 연결을 통해 스마트 폰, 태블릿, 랩탑, 또는 데스크탑과 같은 클라이언트 컴퓨터 상의 애플리케이션 및/또는 웹 브라우저에 대한 확장을 제공할 수 있다.
단계(102)에 도시된 바와 같이, 웹 서비스는 시스템에 소프트웨어 애플리케이션을 제공하도록 사용자를 프롬프팅할 수 있다. 웹 서비스(100)를 이용하는 사용자는 웹 서비스가 하나 이상의 방식으로 컴퓨터 애플리케이션을 수집 및 저장하게 지시할 수 있다. 몇몇 실시예에서, 웹 서비스(100)는 사용자가 웹 서비스(100)에 소프트웨어 애플리케이션 바이너리를 업로드할 수 있도록 하는 사용자 인터페이스를 제공한다. 몇몇 실시예에서, 소프트웨어 애플리케이션 바이너리는 이미 앱 스토어, 마켓플레이스, 또는 다른 위치에 업로드되어 있고, 사용자는 웹 서비스(100)에게 웹 서비스가 소프트웨어 애플리케이션에 액세스하여 다운로드할 수 있는 위치를 제공할 수 있다. 몇몇 실시예에서, 웹 서비스는 사용자에게 웹 서비스가 소프트웨어 애플리케이션 마켓 플레이스에 액세스하는 것을 허용하는 보안 증명서를 제공하도록 요구한다.
단계(103)에서, 웹 서비스(100)는 또한 사용자로부터 요청 정보를 수집 및 저장한다. 몇몇 실시예에서, 웹 서비스(100)는 사용자가 웹 서비스(100)에 제공할 수정사항의 유형이 무엇인지, 및 정보의 유형이 무엇인지 판정하기 위해 사용자가 선택할 옵션을 제공한다. 예를 들어, 요청 정보는 사용자가 그 서비스로부터 요청하고 있는 수정사항의 상세, 애플리케이션을 설명하는 메타데이터, 및 애플리케이션 서명 정보를 포함할 수 있다.
메타데이터는, 예컨대, 애플리케이션의 코드 구조 및 운영 플랫폼을 공급함으로써, 어떤 수정이 행해져야 하는지 판정함에 있어서 수정 서비스(101)를 지원하는데 유용할 수 있다. 또한, 메타데이터는, 예컨대, 버전 넘버, 또는 애플리케이션의 카테고리를 공급함으로써, 컨피규레이션(configuration)을 위해 또는 다른 용도로 컴파일링된 애플리케이션에 포함되도록 이용될 수 있다. 몇몇 실시예에서, 메타데이터는 필요하지 않고 수집되지 않는다. 예를 들어, 몇몇 실시예에서, 시스템은 자동으로 사용자를 대신하여 수정사항을 선택하고, 그러므로 메타데이터는 관련이 없거나 필요하지 않고 수집되지도 않는다. 몇몇 실시예에서, 메타데이터는 사용자에 의해 제공될 수도 있고, 또는 소프트웨어 애플리케이션으로부터 자동으로 추출될 수 있다. 메타데이터는 2진수의 타겟 운영 플랫폼, 애플리케이션의 제목, 버전 넘버, 버전 코드, 시각적 아이콘, 식별자 스트링(예컨대, 패키지 명, 번들 식별자 등), 방향 설정(orientation setting), 컴퓨터 장치 호환성, 현재 코드 구조, 기존 코드 클래스의 목록, 코드 구조, 방법, 스트링(string), 상수, 가져오기(import) 또는 애플리케이션에서 사용된 다른 구조, 애플리케이션의 카테고리, 애플리케이션의 서브카테고리, 장르, 컨텐츠(성인) 등급, 애플리케이션의 설명, 애플리케이션과 연관된 기술 태그(descriptive tag), 애플리케이션 식별자, SDK, API 또는 라이브러리 메타데이터 설정, 아이콘, 2진 애셋, 이미지, 텍스트 애셋, XML, 및 다른 그러한 정보를 포함할 수 있으나, 이에 제한되는 것은 아니다. 또한, 애플리케이션 내의 기계 명령어를 수정하는 방법을 명시하는 정보는, 포함하든 하지 않든, 인터페이스, 제거, 비활성화, 또는 수정 특정 SDK, 라이브러리, 코드 스니펫(code snippet), 텍스트 또는 API를 포함할 수 있으나, 이에 제한되는 것은 아니다.
몇몇 실시예에서, 웹 서비스(100)는 또한 애플리케이션이 디지털 서명되는 방법을 명시한 정보를 받을 수 있다. 소프트웨어 애플리케이션에 디지털 서명을 추가하는 능력은 사용자가, 다른 서비스 또는 시스템이 기능하게 하기 위해 필요할 수 있는, 애플리케이션의 소유권의 증명을 제공하는 것을 도울 수 있다. 디지털 서명이 가능한 실시예에서, 사용자는 추후 수정이 이루어진 후 애플리케이션에 서명하기 위해 사용될 수 있는 서명 "키" 또는 "인증서"를 업로드할 수 있다. 몇몇 실시예에서, 웹 서비스(100)는 서명을 위해 이전에 사용된 키 또는 인증서를 사용자가 선택하는 것을 허용한다. 몇몇 실시예에서, 웹 서비스(100)는 특히 디버깅 목적으로 미리 생성된 인증서의 사용을 사용자가 선택하는 것을 허용한다. 몇몇 실시예에서, 웹 서비스(100)는 서명되지 않은 애플리케이션을 제공한다. 몇몇 실시예에서, 웹 서비스(100)는 사용자가 그들의 애플리케이션에 서명하기 위한 새로운 인증서 또는 키를 생성하는 것을 허용할 수 있다. 그 다음, 그 새로운 키는 그 사용자와 연관지어지고, 추후 사용을 위해 안전한 저장 메커니즘에 보관될 수 있다.
웹 서비스(100)가 소프트웨어 애플리케이션 바이너리 및 임의의 관련 정보를 수집한 후, 웹 서비스(100)는 그 소프트웨어 애플리케이션 바이너리 및 임의의 관련 정보를 소프트웨어 애플리케이션 바이너리를 수정하기 위해 수정 서비스(101)로 전달할 수 있다. 몇몇 실시예에서, 수정 서비스(101)는 웹 서비스(100)와 통신하는 하나 이상의 개인 컴퓨팅 시스템상에 저장된다. 다수의 개인 컴퓨터 시스템 상에 수정 서비스(101)를 저장하게 함으로써, 소프트웨어 애플리케이션 및 수정 도구가 공적 시스템에 내재되어 있는 보안 위험에 노출되는 것을 방지하는 추가적인 보안 층(layer)이 제공될 수 있다. 몇몇 실시예에서, 웹 서비스(100) 및 수정 서비스(101)는 단일 서버 상에 존재할 수도 있다.
딘계(104)에서, 수정 서비스(101)는 요청된 수정을 만드는 방법을 판정하기 위해 애플리케이션을 분석한다. 광고 서비스, 순위(rating) 서비스, 및 분석적 서비스와 같은, 다양한 유형의 수정은 2진 레벨, 어셈블리 레벨, 또는 소스 코드 레벨과 같이, 다양한 코딩 레벨에서의 소프트웨어 애플리케이션 바이너리의 수정을 필요로 할 수 있다. 예를 들어, 사용자가 소프트웨어 애플리케이션을 최초 켤 때마다 팝업 광고 서비스의 추가를 요청한다면, 그 광고 서비스는 2진 코드를 어셈블리 코드로 디스어셈블리하고, 어셈블리 코드를 소스 코드로 디컴파일링할 필요 없이 2진 레벨에서 구현될 수 있다. 그러나, 사용자가 광고 서비시와 분석 서비스를 모두 요청한다면, 수정 서비스(101)는 2진 레벨, 어셈블리 레벨 및 소스 코드 레벨과 같은, 복수의 레벨에서 소스 코드를 수정할 필요가 있다. 수정 서비스(101)는 각각의 수정이 소프트웨어 애플리케이션 바이너리의 각각의 레벨을 수정할 방법을 판정한다.
그 다음, 단계(105)에서, 수정 서비스(101)는 소프트웨어 애플리케이션에 대한 수정을 수행한다. 이 단계 동안, 수정 프로세스와 관련된 정보는 소프트웨어 애플리케이션으로부터 추출된다. 이러한 추출 프로세스는, 압축된 2진 파일의 추출, 컴파일링된 2진 코드(바이트 코드, 기계 코드)의 다른 포맷으로의 디스어셈블리, 어셈블리 코드의 소스 코드로의 디컴파일링레이션(decompilation), 및 2진 애셋의 다른 포맷으로의 디코딩 또는 변환을 포함할 수 있으나, 이에 제한되는 것은 아니다. 코드가 다양한 포맷일 수 있으나, 수정은 기계 명령어에 행해진다. 여기서, 명령어는 2진 코드, 바이트코드, 디스어셈블리된 또는 어셈블리 코드 및 언컴파일링된/디컴파일링된 또는 소스 코드를 의미할 수 있다. 명령어를 수정하는 것은 명령어의 수정, 보충 명령어의 포함, 기존 명령어의 삭제, 및 메타데이터, 애셋(이미지 포함), 및 2진 파일의 수정, 포함 또는 삭제를 포함하여, 다양한 방식으로 달성될 수 있다.
단계(106)에서, 수정된 애플리케이션은 마감처리되는데, 예컨대, 빌트, 컴파일링, 압축, 정렬, 어셈블리되거나, 또는 사용 가능한 애플리케이션이 만들어지게 하는 임의의 다른 방법도 가능하다. 적용 가능하다면, 수정된 애플리케이션은 또한 사용자에 의해 애플리케이션의 소유권을 검증하기 위해 사용 가능한 인증서/증명서를 이용하여 서명된다. 그 다음, 단계(107)에서, 수정된 애플리케이션 및 메타데이터가 반환되고 웹 서비스(100)에 저장된다.
단계(108)에서, 애플리케이션이 사용자에게 반환된다. 몇몇 실시예에서, 수저된 애플리케이션은 사용자가 다운로딩 가능하도록 만들어진다. 몇몇 실시예에서, 수정된 애플리케이션이 사용 가능하게 만들어지는 방법은 다운로드할 소프트웨어를 제공하는 것, 서비스 상에 소프트웨어를 저장하는 것, 디버깅 및 서비스 개선을 위해 내부 액세스를 허용하는 것, 또는 소프트웨어를 제3자 또는 내부 퍼블리싱 서비스로 전송하는 것을 포함하지만, 이에 제한되는 것은 아니다.
도 2는 수정이 행해지기 전의 예시적인 소프트웨어 애플리케이션(203)을 도시한다. 도시된 바와 같이, 소프트웨어 애플리케이션(203)은 컴퓨팅 장치(201)의 디스플레이(202) 상에 제공된다. 도시된 바와 같이, 소프트웨어 애플리케이션(203)은 시각적 및 비시각적 엘리먼트와 같은 콘텐트(204)를 가진다. 단지 예로서, 이들은 이미지, 텍스트, 맵, 게임 콘텐트, 및 다른 멀티미디어 또는 사용자 인터페이스 엘리먼트를 포함할 수 있다.
도 3은 수정이 행해진 후 수정된 소프트웨어 애플리케이션(301)의 예를 보여준다. 도시된 바와 같이, 수정된 소프트웨어 애플리케이션(301)은 여전히 자신의 오리지널 콘텐트(204)를 가질 수 있다. 또한, 그것은 시각적 및 비시각적 콘텐트를 포함할 수 있는 수정된 콘텐트를 가진다. 이 예에서, 새로운 서비스(303) 및 광고(304)가 수정된 소프트웨어 애플리케이션(301)에 추가되었다. 기존의 앱에 행해진 수정은 이러한 추가 피처들을 지원한다.
도 4는 컴퓨터 애플리케이션 및 다른 관련 데이터를 수집 및 저장하기 위해 사용자와 인터페이싱하기 위한 웹 브라우저(400)로부터 볼 수 있는 예시적인 웹사이트(401)를 제공한다. 이 예시적인 웹사이트(401)는 소프트웨어 애플리케이션을 업로드하기 위해 브라우저의 사용자에게 업로드 모듈(402)을 제공한다. 웹사이트(401)는 진행 바(403)를 이용하여 업로드의 진행을 보여줄 수 있다. 웹사이트는 또한 추가 필드(404)를 제공할 수 있는데, 여기서 사용자는 추가 정보를 제공할 수 있다. 예시적인 웹사이트(401)에서, 사용자는 카테고리에 관한 정보, 장르 및 애플리케이션의 스크린 방향과 같은 다른 정보를 제공할 수 있다.
도 5는 웹 브라우저(500)로부터 액세스 가능한 수정 옵션들을 선택하기 위한 예시적인 웹사이트(501)를 제공한다. 수정 옵션 메뉴(502)는 사용자가 수정된 소프트웨어 애플리케이션에 포함될 서비스의 유형이 무엇인지 선택하는 것을 가능하게 한다. 이 예에서, 사용자는 서비스를 켜고 끄기 위해 토글 박스(503)를 선택할 수 있고, 선택된 수정에 대한 컨피규레이션(configuration) 메타데이터를 공급하기 위해 입력 박스(504)에 추가 정보를 입력할 수 있다.
도 6은 본 발명의 실시예에 따른 소프트웨어 수정 흐름도를 도시한다. 도시된 바와 같이, 컴퓨팅 장치(600)상의 사용자는 웹사이트(605(a))에서와 마찬가지로, 소프트웨어 수정 서비스에 소프트웨어 애플리케이션 바이너리(601(a))를 제공한다. 사용자는 또한 웹사이트에 메타데이터(602) 및 수정 선택(603)을 제공할 수 있고, 및/또는 소프트웨어 수정 서비스는 소프트웨어 애플리케이션 바이너리(601(a))에 대하여 추가 메타데이터 추출(604)을 수행할 수 있다. 소프트웨어 애플리케이션 바이너리(601(b)) 및 수정 선택 메타데이터(606)를 포함한 모든 관련 데이터가 수집되면, 그것들은 애플리케이션을 수정하기 위해 필요한 필수 단계들을 결정하기 위해 소프트웨어 분석기(607)에 제공된다. 그 다음, 단계(608)에서 수정이 수행된 후, 단계(609)에서 수정된 애플리케이션 바이너리(610(a))로 사용 가능한 포맷으로 컴파일링된다. 그 다음, 웹사이트는 단계(610(b))에서 사용자 컴퓨팅 장치에 제공될 수 있는, 또는 다른 방식으로, 예컨대, 디버깅 및 서비스 개선을 위한 내부 액세스를 허용함으로써 또는 소프트웨어를 제3자 또는 내부 퍼블리싱 서비스로 전송함으로써, 사용자에게 제공될 수 있는, 수정된 애플리케이션에 대한 액세스를 허용한다.
도 7-9는 소프트웨어 애플리케이션을 수정하기 위해 필요하다고 소프트웨어 분석기(607)가 결정한 것을 기초로 달라지는 수정 시스템(608)의 다양한 흐름도를 도시한다. 도 7은 소프트웨어 수정 시스템(700)을 도시하는데, 여기서 그것은 2진 명령어, 어셈블리 명령어, 및 소스 코드에 대한 수정이 필요하다고 판정하였다. 도시된 바와 같이, 소프트웨어 애플리케이션 바이너리(701) 및 임의의 수정 선택 및 메타데이터(702)는 소프트웨어 수정 시스템(700)에 공급된다. 추출기(703)는 적용 가능하다면, 애셋을 드러내기 위해 애플리케이션 바이너리를 추출하고, 그 다음 바이너리 패치기(patcher)(704)는 수정 선택 및 메타데이터(702)를 기초로 2진 명령어를 수정한다. 그 다음, 디스어셈블러(705)는 애플리케이션 바이너리 파일을 어셈블리 명령어로 디스어셈블리하고, 어셈블리 주입기(706)는 그 어셈블리 명령어를 수정 선택 및 메타데이터(702)를 기초로 수정한다. 그 다음, 디컴파일링러(707)는 어셈블리 명령어를 소스 코드로 디컴파일링하고, 소스 수정기(708)는 수정 선택 및 메타데이터(702)를 기초로 소스 코드를 수정한다. 그 다음, 파일 주입기(709)는 파일 또는 메타데이터를 해체된 애플리케이션으로 주입 또는 패치(patch)한다. 컴파일러(709)는 애플리케이션을 여러 차례 사용 가능한 포맷으로 컴파일링한다. 그 다음, 적용 가능하다면, 서명기(711)는 사용자에 대한 애플리케이션의 소유권을 검증하기 위해 수정된 애플리케이션에 서명한다. 그 다음, 수정된 애플리케이션 바이너리(712)는 사용자에게 사용 가능하게 된다.
몇몇 실시예에서, 어느 유형의 수정이 필요하지 않다면, 그들은 스킵된다. 도 8은 소스 코드에 대한 수정이 필요하지 않은 소프트웨어 수정 시스템을 도시한다. 그 대신, 수정은 2진 레벨(추출기(703) 및 바이너리 패치기(704)) 및 어셈블리 레벨(디스어셈블러(705) 및 어셈블리 주입기(706))에서 수행된다. 도 9는 소스 코드 또는 어셈블리 코드의 수정이 필요하지 않은 소프트웨어 수정 시스템의 실시예를 도시한다. 그 대신 모든 수정은 2진 레벨(디스어셈블러(705) 및 어셈블리 주입기(706))에서 수행된다.
다양한 실시예에서, 도 1 및 6-9에서 설명된 방법 단계들을 포함하여, 여기 서술된 방법 단계들은 서술되거나 도시된 특정 순서와 상이한 순서로 수행될 수도 있다. 다른 실시예에서, 다른 단계들이 제공될 수도 있고, 서술된 방법에서 몇몇 단계들이 제거될 수도 있다.
여기 서술된 시스템, 장치, 및 방법은 디지털 회로를 이용하여 또는 공지된 컴퓨터 프로세스, 메모리 유닛, 저장 장치, 컴퓨터 소프트웨어, 및 다른 구성요소들을 이용하는 하나 이상의 컴퓨터를 이용하여 구현될 수 있다. 전형적으로, 컴퓨터는 명령어를 실행하는 프로세서 및 명령어 및 데이터를 저장하는 하나 이상의 메모리를 포함한다. 컴퓨터는 또한 하나 이상의 자기 디스크, 내부 하드 디스크 및 제거 가능한 디스크, 광 디스크 등과 같은 하나 이상의 저장 장치를 포함하거나, 저장 장치와 연결될 수 있다.
여기 서술된 시스템, 장치, 및 방법은 네트워크 기반의 클라우드 컴퓨팅 시스템 내에서 사용될 수 있다. 이러한 네트워크 기반의 클라우드 컴퓨팅 시스템에서, 네트워크에 연결된 서버 또는 다른 프로세서는 네트워크를 통해 하나 이상의 클라이언트 컴퓨터와 통신한다. 예를 들어, 클라우드 컴퓨터는 클라이언트 컴퓨터 상에 상주하고 동작하는 네트워크 브라우저 애플리케이션을 통해 서버와 통신할 수 있다. 클라이언트 컴퓨터는 서버에 데이터를 저장하고 네트워크를 통해 데이터에 액세스할 수 있다. 클라이언트 컴퓨터는 네트워크를 통해 서버에, 데이터에 대한 요청 또는 온라인 서비스에 대한 요청을 전송할 수 있다. 도 1 및 6-9의 하나 이상의 단계들을 포함하여 여기 서술된 방법의 어느 단계는 서버 또는 네트워크 기반의 클라우드 컴퓨팅 시스템 내의 다른 프로세서에 의해 수행될 수 있다. 도 1 및 6-9의 하나 이상의 단계들을 포함하여 여기 서술된 방법의 어느 단계는 네트워크 기반의 클라우드 컴퓨팅 시스템 내의 클라이언트 컴퓨터에 의해 실행될 수 있다. 도 1 및 6-9의 하나 이상의 단계들을 포함하여 여기 서술된 방법의 단계는 서버에 의해, 및/또는 네트워크 기반의 클라우드 컴퓨팅 시스템 내의 클라이언트 컴퓨터에 의해, 또는 그 임의의 조합으로 수행될 수 있다.
여기 서술된 시스템, 장치, 및 방법을 구현하기 위해 사용될 수 있는 예시적인 컴퓨터(1000)의 하이 레벨 블록도가 도 10에 도시되어 있다. 컴퓨터(1000)는 데이터 저장 장치 및 메모리에 유효하게 연결되어 있는 프로세서(1010)를 포함한다. 프로세서(1010)는 컴퓨터(1000)의 전체적인 동작을 정의하는 컴퓨터 프로그램 명령어를 실행함으로써 그러한 동작을 제어한다. 컴퓨터 프로그램 명령어는 데이터 저장 장치(1020) 또는 다른 비일시적 컴퓨터 판독 가능한 매체에 저장될 수 있고, 컴퓨터 프로그램 명령어의 실행이 요구될 때 메모리(1030)로 로딩된다. 그러므로, 도 1 및 6-9의 방법 단계들은 메모리(1030) 및/또는 데이터 저장 장치(1020)에 저장된 컴퓨터 프로그램 명령어로서 정의될 수 있고, 컴퓨터 프로그램 명령어를 실행하는 프로세서(1010)에 의해 제어될 수 있다.
예를 들어, 컴퓨터 프로그램 명령어는 도 1 및 6-9의 방법 단계에 의해 정의된 알고리즘을 수행하기 위해 당업자들에 의해 프로그래밍된 컴퓨터 실행 가능한 코드로서 구현될 수 있다. 컴퓨터(1000)는 또한 네트워크를 통해 다른 장치들과 통신하기 위한 하나 이상의 네트워크 인터페이스(1040)를 포함한다. 컴퓨터(1000)는 또한 컴퓨터(1000)와의 사용자 상호작용을 가능하게 하는 하나 이상의 입/출력 장치(1050)(예컨대, 디스플레이, 키보드, 터치패드, 마우스, 스피커, 버튼 등)을 포함할 수 있다.
프로세서(1010)는, 여러 가지 중에서도 특히, 프로세서(1010)를 제어하기 위해, 저장 장치(1020) 또는 메모리(1030) 내의 명령어를 가지는 범용 프로세서, 및 프로세서 설계에 통합된 소프트웨어 명령어를 가지는 특수 목적용 프로세서를 포함할 수 있고, 단독 프로세서 또는 컴퓨터(1000)의 복수의 프로세서 중 하나일 수 있다. 프로세서(1010)는 복수의 코어 또는 프로세서, 버스, 메모리 컨트롤러, 캐쉬 등을 포함하는 자립형(self-contained) 컴퓨팅 시스템일 수 있다. 멀티 코어 프로세서는 대칭형 또는 비대칭형일 수 있다. 프로세서(1010), 데이터 저장 장치(1020), 및/또는 메모리(1030)는 하나 이상의 주문형 반도체(ASIC) 및/또는 하나 이상의 현장 프로그래밍 가능한 게이트 어레이(FPGA)를 포함할 수도 있고, 그것들에 의해 보충될 수 있고, 또는 그것들에 통합될 수도 있다. 본 발명이 더 큰 프로세싱 능력을 제공하기 위해 서로 네크워크화 된 한 그룹 또는 클러스터의 컴퓨터들 상의 하나 이상의 프로세서(1010)와 함께 컴퓨터(1000) 상에서 실행될 수 있음을 이해될 것이다.
데이터 저장 장치(1020) 및 메모리(1030)는 각각 유형의 비일시적 컴퓨터 판독 가능한 저장 매체를 포함한다. 제하하지 않는 예로서, 이러한 비일시적 컴퓨터 판독 가능한 저장 매체는 RAM(random access memory), DRAM(high-speed random access memory), SRAM(static random access memory), DDRRAM(double data rate synchronous dynamic random access memory), ROM(read-only memory), EPROM(erasable programmable read-only memory), EEPROM(electrically erasable programmable read-only memory), 플래시 메모리, CD-ROM(compact disc read-only memory), DVD-ROM(digital versatile disc read-only memory) 디스크 또는 다른 광 디스크 저장장치, 자기 디스크 저장장치 또는 다른 자기 저장 장치, 또는 컴퓨터 실행 가능한 명령어, 데이터 구조, 또는 프로세서 칩 디자인 형태의 희망의 프로그램 코드 수단을 운반 또는 저장하기 위해 사용될 수 있는 임의의 다른 저장 매체를 포함할 수 있다. 네트워크 또는 다른 통신 연결(유선, 무선, 또는 이들의 조합)을 통해 컴퓨터로 정보가 전달 또는 제공될 때, 컴퓨터는 컴퓨터 판독 가능한 매체로서 그러한 연결을 적절하게 본다. 그러므로, 임의의 그러한 연결도 컴퓨터 판독 가능한 매체로 불리는 것이 적절하다. 상술한 것들의 조합도 컴퓨터 판독 가능한 매체의 범위 내에 포함되어야 한다.
네트워크/통신 인터베이스(1040)는 컴퓨터(1000)가 월드 와이드 웹(WWW)이라고도 불리는 인터넷, 셀룰러 전화 네트워크와 같은 무선 네트워크 및/또는 인트라넷, 무선 근거리 통신망(LAN), 및/또는 도시권 통신망(MAN) 및 임의의 적절한 통신 표준, 프로토콜 및 기술을 이용하는 다른 장치와 같은 네트워크와 통신할 수 있게 한다. 제한하지 않는 예로서, 이러한 적절한 통신 표준, 프로토콜, 및 기술은 이더넷, 와이파이(예컨대, IEEE 802.11), 와이맥스(예컨대, 802.16), 블루투스, NFC(near field communications), 무선주파수 시스템, 적외선, GSM, EDGE, HS-DPA, CDMA, TDMA, 쿼드밴드, VoIP, IMAP, POP, XMPP, SIMPLE, IMPS, SMS, 또는 임의의 다른 적절한 통신 프로토콜을 포함할 수 있다. 제한하지 않는 예로서, 네트워크 인터페이스(1040)는 컴퓨터(1000)가 데이터 전달, 정보 동기화, 소프트웨어 업데이트, 또는 임의의 다른 적절한 작업을 할 수 있게 한다.
입/출력 장치(1050)는 주변장치를 포함할 수 있다. 입/출력 장치(1050)는 또한 터치스크린, 스피커, 및 버튼을 가지는 스마트폰과 같은 컴퓨팅 장치의 일부분을 포함할 수 있다. 예를 들어, 입/출력 장치(1050)는 사용자에게 정보를 디스플레이하기 위한 액정 디스플레이(LCD) 모니터와 같은 디스플레이 장치, 사용자가 컴퓨터(1000)에 입력을 제공할 수 있게 하는 키보드 및 마우스, 또는 입출력 모두 가능한 터치스크린을 포함할 수 있다.
퍼스널 컴퓨터, 태블릿 컴퓨터, 휴대 장치, 셀룰러 전화, 서버, 데이터베이스, 클라우드 컴퓨팅 환경, 및 이들의 컴포넌트를 포함하여, 여기 서술된 모든 또는 임의의 시스템 및 장치는 컴퓨터(1000)와 같은 컴퓨터를 이용하여 구현될 수 있다.
당업자들은 실제 컴퓨터 또는 컴퓨터 시스템의 구현방법이 다른 구조를 가질 수도 있고 어느 다른 컴포넌트도 포함할 수 있음을 이해할 것이고, 도 10은 설명의 목적으로 이러한 컴퓨터의 몇몇 컴포넌트의 하이레벨 도면이다.
본 발명의 바람직한 실시예의 앞선 설명은 설명 및 예시의 목적으로 제공된 것이다. 그것은 빠트림 없이 철저하게 기술할 의도가 아니였으며, 개시된 정확한 형태로 본 발명을 제한하도록 의도되지도 않았다. 상기 교시를 통해 다양한 수정 및 변형이 가능하다. 본 발명의 범위가 이러한 상세한 설명에 의해 제한되지 않으며, 첨부된 청구항 및 청구항의 동등물에 의해 정의되도록 의도되었다.

Claims (15)

  1. 소프트웨어 수정 방법으로서,
    컴퓨팅 장치에서:
    a. 2진 명령어를 포함하는 소프트웨어 애플리케이션 바이너리, 사용자의 하나 이상의 수정 선택, 및 상기 하나 이상의 수정 선택과 연관된 2진 코드를 수신하는 단계;
    b. 상기 2진 명령어에 대한 하나 이상의 수정이 필요한지 여부를 판정하기 위해 상기 소프트웨어 애플리케이션 바이너리를 분석하는 단계;
    c. 상기 2진 명령어에 대한 수정이 필요하다면, 상기 하나 이상의 수정 선택에 따라 자동으로 상기 2진 명령어를 수정하는 단계로서, 상기 하나 이상의 수정 선택과 연관된 상기 2진 코드를 상기 소프트웨어 애플리케이션 바이너리에 삽입하는 단계, 상기 소프트웨어 애플리케이션 바이너리로부터 하나 이상의 2진 명령어를 삭제하는 단계, 또는 상기 소프트웨어 애플리케이션 바이너리 내의 하나 이상의 2진 명령어를 비활성화하는 단계를 포함하는, 상기 2진 명령어를 수정하는 단계;
    d. 기존의 메타데이터를 삭제하고, 새로운 메타데이터를 상기 소프트웨어 애플리케이션 바이너리에 주입하여, 수정된 소프트웨어 애플리케이션 바이너리를 생성하는 단계;
    e. 상기 수정된 소프트웨어 애플리케이션 바이너리를 컴파일링하는 단계; 및
    f. 상기 수정된 소프트웨어 애플리케이션 바이너리를 반환하는 단계를 포함하는 것을 특징으로 하는 소프트웨어 수정 방법.
  2. 제 1 항에 있어서, 상기 하나 이상의 수정 선택은 소프트웨어 개발 키트, 라이브러리, 코드 스니펫(snippet), 텍스트 및 애플리케이션 프로그래밍 인터페이스로 이루어진 그룹으로부터 선택된 하나 이상의 명령어 유형의 추가, 제거, 비활성화, 및 수정을 포함하는 것을 특징으로 하는 소프트웨어 수정 방법.
  3. 제 2 항에 있어서, 어셈블리 명령어에 대한 수정이 필요한지 여부를 판정하기 위해 상기 소프트웨어 애플리케이션 바이너리 및 상기 하나 이상의 수정 선택을 분석하는 단계; 및
    어셈블리 명령어에 대한 수정이 필요하다면, 2진 명령어를 어셈블리 명령어로 역어셈블리하고, 상기 사용자의 상기 하나 이상의 수정 선택에 따라 상기 어셈블리 명령어를 수정하는 단계를 더 포함하는 것을 특징으로 하는 소프트웨어 수정 방법.
  4. 제 3 항에 있어서, 소스 코드에 대한 수정이 필요한지 여부를 판정하기 위해 상기 소프트웨어 애플리케이션 바이너리 및 상기 하나 이상의 수정 선택을 분석하는 단계,
    소스 코드에 대한 수정이 필요하다면, 상기 어셈블리 명령어를 소스 코드 명령어로 역컴파일링하고, 상기 사용자의 상기 하나 이상의 수정 선택에 따라 상기 소스 코드 명령어를 수정하는 단계를 더 포함하는 것을 특징으로 하는 소프트웨어 수정 방법.
  5. 제 4 항에 있어서, 상기 소프트웨어 애플리케이션 바이너리의 메타데이터를 수신하는 단계를 더 포함하고, 상기 소프트웨어 애플리케이션 바이너리를 분석하는 단계는 상기 메타데이터를 분석하는 단계를 더 포함하고, 상기 2진 명령어를 수정하는 단계는 상기 메타데이터를 더 기초로 하는 것을 특징으로 하는 소프트웨어 수정 방법.
  6. 제 5 항에 있어서, 상기 수정된 소프트웨어 애플리케이션 바이너리를 반환하는 단계 이전에 디지털 키를 이용하여 상기 수정된 소프트웨어 애플리케이션 바이너리에 서명하는 단계를 더 포함하는 것을 특징으로 하는 소프트웨어 수정 방법.
  7. 제 6 항에 있어서, 상기 소프트웨어 애플리케이션 바이너리를 수신하는 단계는 애플리케이션 바이너리를 업로드한 사용자로부터 애플리케이션 바이너리를 수신하는 단계, 또는 온라인 애플리케이션 마켓플레이스로부터 애플리케이션 바이너리를 다운로딩하는 단계로 이루어진 그룹으로부터 선택된 것을 특징으로 하는 소프트웨어 수정 방법.
  8. 제 7 항에 있어서, 상기 소프트웨어 애플리케이션 바이너리를 반환하는 단계는 다운로드를 위해 소프트웨어 애플리케이션 바이너리를 제공하는 단계, 디버깅 및 서비스 개선을 위해 소프트웨어 애플리케이션에 대한 접근을 제공하는 단계, 및 애플리케이션 바이너리를 온라인 애플리케이션 마켓플레이스에 공개하는 단계로 이루어진 그룹으로부터 선택된 것을 특징으로 하는 소프트웨어 수정 방법.
  9. 내부에 명령어를 저장하고 있는 비일시적 컴퓨터 판독 가능한 저장 매체로서, 상기 명령어는 컴퓨팅 장치에 의해 실행된 때 상기 컴퓨팅 장치가:
    a. 2진 명령어를 포함하는 소프트웨어 애플리케이션 바이너리, 하나 이상의 수정 선택, 및 상기 하나 이상의 수정 선택과 연관된 2진 코드를 수신하고,
    b. 상기 2진 명령어에 대한 수정이 필요한지 여부를 판정하기 위해 상기 소프트웨어 애플리케이션 바이너리를 분석하고;
    c. 상기 2진 명령어에 대한 수정이 필요하다면, 자동으로 상기 하나 이상의 수정 선택에 따라 상기 2진 명령어를 수정하고;
    d. 기존의 메타데이터를 삭제하고 새로운 메타데이터를 상기 소프트웨어 애플리케이션 바이너리에 주입하여, 수정된 소프트웨어 애플리케이션 바이너리를 생성하고;
    e. 상기 수정된 소프트웨어 애플리케이션 바이너리를 컴파일링하고; 그리고
    f. 상기 수정된 소프트웨어 애플리케이션 바이너리를 반환하도록 만들고,
    상기 2진 명령어의 수정은 상기 하나 이상의 수정 선택과 연관된 상기 2진 코드를 상기 2진 명령어에 삽입하는 것, 상기 소프트웨어 애플리케이션 바이너리로부터 하나 이상의 2진 명령어를 제거하는 것, 또는 상기 소프트웨어 애플리케이션 바이너리 내의 하나 이상의 2진 명령어를 비활성화하는 것을 포함하는 것을 특징으로 하는 내부에 명령어를 저장하고 있는 비일시적 컴퓨터 판독 가능한 저장 매체.
  10. 제 9 항에 있어서, 상기 하나 이상의 수정 선택은 소프트웨어 개발 키트, 라이브러리, 코드 스닙펫, 텍스트, 및 애플리케이션 프로그래밍 인터페이스로 이루어진 그룹으로부터 선택된 하나 이상의 명령어 타입의 추가, 제거, 비활성화, 또는 수정을 포함하는 것을 특징으로 하는 내부에 명령어를 저장하고 있는 비일시적 컴퓨터 판독 가능한 저장 매체.
  11. 제 10 항에 있어서, 어셈블리 명령어에 대한 수정이 필요한지 여부를 판정하기 위해 상기 소프트웨어 애플리케이션 바이너리 및 상기 하나 이상의 수정 선택을 분석하고, 어셈블리 명령어에 대한 수정이 필요하다면, 애플리케이션 바이너리 명령어를 어셈블리 명령어로 역어셈블리하고, 상기 어셈블리 명령어를 수정하도록 하는 명령어를 더 포함하는 것을 특징으로 하는 내부에 명령어를 저장하고 있는 비일시적 컴퓨터 판독 가능한 저장 매체.
  12. 제 11 항에 있어서, 소스 코드에 대한 수정이 필요한지 여부를 판정하기 위해 상기 소프트웨어 애플리케이션 바이너리 및 상기 하나 이상의 수정 선택을 분석하고, 소스 코드에 대한 수정이 필요하다면, 상기 어셈블리 명령어를 소스 코드 명령어로 역컴파일링하고, 상기 소스 코드 명령어를 수정하도록 하는 명령어를 더 포함하는 것을 특징으로 하는 내부에 명령어를 저장하고 있는 비일시적 컴퓨터 판독 가능한 저장 매체.
  13. 제 12 항에 있어서, 상기 소프트웨어 애플리케이션 바이너리의 메타데이터를 수신하도록 하는 명령어를 더 포함하고, 상기 소프트웨어 애플리케이션 바이너리를 분석하는 것은 메타 데이터를 분석하는 것을 더 포함하는 것을 특징으로 하는 내부에 명령어를 저장하고 있는 비일시적 컴퓨터 판독 가능한 저장 매체.
  14. 제 13 항에 있어서, 디지털 키를 이용하여 상기 수정된 소프트웨어 애플리케이션 바이너리에 서명하도록 하는 명령어를 더 포함하는 것을 특징으로 하는 내부에 명령어를 저장하고 있는 비일시적 컴퓨터 판독 가능한 저장 매체.
  15. 제 14 항에 있어서, 사용자 인터페이스를 더 포함하고, 상기 사용자 인터페이스는 사용자가 상기 하나 이상의 수정 선택을 선택하기 위한 복수의 수정 옵션을 제공하는 것을 특징으로 하는 내부에 명령어를 저장하고 있는 비일시적 컴퓨터 판독 가능한 저장 매체.
KR1020187003236A 2015-07-17 2016-07-13 컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템 KR101935847B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201562194180P 2015-07-17 2015-07-17
US62/194,180 2015-07-17
PCT/US2016/042139 WO2017015036A1 (en) 2015-07-17 2016-07-13 A method and system for modifying machine instructions within compiled software

Publications (2)

Publication Number Publication Date
KR20180017211A KR20180017211A (ko) 2018-02-20
KR101935847B1 true KR101935847B1 (ko) 2019-01-07

Family

ID=57834988

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187003236A KR101935847B1 (ko) 2015-07-17 2016-07-13 컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템

Country Status (7)

Country Link
US (2) US10310831B2 (ko)
EP (1) EP3311266A4 (ko)
JP (1) JP2018523218A (ko)
KR (1) KR101935847B1 (ko)
CN (1) CN107924302B (ko)
IL (1) IL256382B (ko)
WO (1) WO2017015036A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101935847B1 (ko) 2015-07-17 2019-01-07 인핸스 인코퍼레이티드 컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템
US10228936B2 (en) * 2016-12-16 2019-03-12 EntIT Software, LLC Software delivery pipeline management
CN109308183A (zh) * 2018-07-30 2019-02-05 南阳理工学院 一种面向vliw芯片可执行代码的逆向工具方法
US11055105B2 (en) * 2018-08-31 2021-07-06 Micron Technology, Inc. Concurrent image measurement and execution
US20220237300A1 (en) * 2021-01-22 2022-07-28 Microsoft Technology Licensing, Llc Firmware component identification and vulnerability assessment
US11977868B2 (en) * 2022-01-04 2024-05-07 Xerox Corporation Search based approach for generating controller models

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013003292A1 (en) * 2011-06-27 2013-01-03 Amazon Technologies, Inc. Service for adding functionality to applications
US20130103790A1 (en) 2011-10-24 2013-04-25 Infosys Limited System and method for providing one or more updated files for a generated user personalized software application
US20150040112A1 (en) 2013-08-01 2015-02-05 Qualcomm Incorporated Enabling Interoperability Between Software Applications By Utilizing Partial Binaries

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7934211B2 (en) * 2005-06-30 2011-04-26 Oracle International Corporation Multi-level patching operation
US7901752B2 (en) * 2006-06-16 2011-03-08 Albany International Corp. Advanced battery paster belt
US8418122B2 (en) * 2006-10-13 2013-04-09 Oracle America, Inc. Incorporating functionality from an object file into an existing binary file
US9280337B2 (en) * 2006-12-18 2016-03-08 Adobe Systems Incorporated Secured distribution of software updates
TWM325778U (en) * 2007-06-23 2008-01-21 Shuen Huang Attachment structure for a seat back
WO2009097350A1 (en) * 2008-01-29 2009-08-06 Palm, Inc. Secure application signing
CN102459791A (zh) * 2009-04-10 2012-05-16 关卡系统公司 推销式安全装置
US20100333079A1 (en) * 2009-06-30 2010-12-30 Computer Associates Think, Inc. Binary Code Modification System and Method for Implementing Identity and Access Management or Governance Policies
US8627303B2 (en) * 2009-11-30 2014-01-07 International Business Machines Corporation Memory optimization of virtual machine code by partitioning extraneous information
US9256401B2 (en) * 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US8856724B2 (en) * 2011-06-20 2014-10-07 Ebay Inc. Systems and methods for incremental software development
US20130019235A1 (en) * 2011-07-11 2013-01-17 Salesforce.Com, Inc. Mechanism for facilitating management of metadata and metada-based update of software
US8707289B2 (en) * 2011-07-20 2014-04-22 Google Inc. Multiple application versions
CN103034479A (zh) * 2011-10-09 2013-04-10 镇江雅迅软件有限责任公司 一种基于结构动态技术的数据生成系统
US9027004B1 (en) 2013-03-12 2015-05-05 Amazon Technologies, Inc. Injection of supplemental computer instructions
US20140282371A1 (en) * 2013-03-14 2014-09-18 Media Direct, Inc. Systems and methods for creating or updating an application using a pre-existing application
US10184494B2 (en) * 2013-06-28 2019-01-22 Hamilton Sundstrand Corporation Enhance motor cooling system and method
US10452370B2 (en) * 2015-01-09 2019-10-22 University Of Virginia Patent Foundation System, method and computer readable medium for space-efficient binary rewriting
KR101935847B1 (ko) 2015-07-17 2019-01-07 인핸스 인코퍼레이티드 컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013003292A1 (en) * 2011-06-27 2013-01-03 Amazon Technologies, Inc. Service for adding functionality to applications
US20130103790A1 (en) 2011-10-24 2013-04-25 Infosys Limited System and method for providing one or more updated files for a generated user personalized software application
US20150040112A1 (en) 2013-08-01 2015-02-05 Qualcomm Incorporated Enabling Interoperability Between Software Applications By Utilizing Partial Binaries

Also Published As

Publication number Publication date
US20180203677A1 (en) 2018-07-19
US20190272161A1 (en) 2019-09-05
EP3311266A4 (en) 2018-09-12
WO2017015036A1 (en) 2017-01-26
CN107924302A (zh) 2018-04-17
US10310831B2 (en) 2019-06-04
CN107924302B (zh) 2021-03-30
EP3311266A1 (en) 2018-04-25
IL256382A (en) 2018-02-28
KR20180017211A (ko) 2018-02-20
US10747518B2 (en) 2020-08-18
IL256382B (en) 2018-10-31
JP2018523218A (ja) 2018-08-16

Similar Documents

Publication Publication Date Title
KR101935847B1 (ko) 컴파일링된 소프트웨어 내의 기계 명령어를 수정하기 위한 방법 및 시스템
US9454363B1 (en) Mobile application development system and method
US9286040B2 (en) Software builder
US9563415B2 (en) Generating visually encoded dynamic codes for remote launching of applications
US9374275B2 (en) Rapid application development using a content management system
CN105765527A (zh) 用于定制的软件开发包(sdk)的方法和装置
KR20110129436A (ko) 디바이스 의존적인 모바일 애플리케이션의 온 디맨드 컴파일링 및 설치
KR102122451B1 (ko) 애플리케이션의 개발을 지원하는 플랫폼의 동작 방법 및 플랫폼을 제공하는 서버
Love Progressive Web Application Development by Example: Develop fast, reliable, and engaging user experiences for the web
Blankenberg et al. Wrangling Galaxy’s reference data
US20130339160A1 (en) Application marketplace for online advertising applications
Seymour et al. How to create an app
CN106257418A (zh) 用于通过使用辅助应用来评价应用的技术
CN110928571A (zh) 业务程序开发方法和装置
US20200285450A1 (en) System for providing instant preview of a mobile application under development
CN112181408A (zh) 在应用程序前端页面显示视图列表的方法和装置
Revote et al. Development of a cloud-based Bioinformatics Training Platform
CN110806935B (zh) 应用程序构建方法、装置和系统
TW201606547A (zh) 用戶定義的動態事件
US20200050432A1 (en) System for providing customized and instant preview of a mobile application in near real time
Ionescu Using cross platform development libraries. telerik mobile
US20210334092A1 (en) System For Providing Instant Preview Of A Mobile Application Under Development
US11381940B1 (en) Tethering computer programs and user interfaces to selected targets
US10755321B1 (en) Techniques for dynamic utilization of advertising capabilities by applications on user devices
KR20110103888A (ko) 사용자 설정 포맷을 가지는 콘텐츠의 액세스 및 공유 시스템 및 이의 동작 방법

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant