作心 三日이면         三日마다 作心하라!
by Ditongs
카테고리
태그
rss

skin by 꾸자네
[Linux] BAD PASSWORD: is too similar to the old one

리눅스에서 passwd 명령어를 이용해서 비밀번호를 변경할 때 기존 비밀번호랑 패턴이 유사하면
"BAD PASSWORD: is too similar to the old one" 에러 메시지를 출력합니다. 이를 무시하고 그냥 사용하고 싶은데 무시하는 옵션이 없어서 한참을 고생하면 검색하고 있는데... 문득 머리를 스쳐지나가는 생각!!!

1. 일단 패턴이 비슷하지 않은 암호로 변경한다.
2. 원래 변경하고 싶었던 비밀번호로 변경한다.

........................ 응캉;;

by Ditongs | 2009/08/12 15:42 | Software | 트랙백 | 덧글(0)
[PHP] WMI 오브젝트 사용하기
Well anything you do via the web in some way can be a security risk so I don't see where using any windows objects even * winmgmts * via PHP and COM or .NET is anymore dangerous than opening a web server up on port 80, no matter what server you are using!

Anyway WMI in web developing is used best as reading IO to help a administrator keep tack of system wide tasks! It can also be used as a write IO but you will be limited in doing this if using PHP 5, PHP 4 allows better access to WMI as more things are working in that version of PHP. A important thing that is broken in PHP 5 is passing collections of arrays by reference. This is used greatly in the WMI object model so accessing key data like * registry, user classes* will not work for over 50% of those inherited classes! If you use PHP 4 then you can access everything but it becomes very messy having to assign variants in your loops. In other words it's more work.

For hardware tasks like drive info, task manager, starting and stopping services PHP 5 can do this sort of thing even in it's broken state.

Some real world examples.... (PHP 4, 5 any version)

// Check if a process is running (PHP 5)

<?
      define ( 'CPU_NAME', '.' );

      $check = 'explorer.exe'; // the process to check

      $obj = new COM ( 'winmgmts:{impersonationLevel=impersonate}//' . CPU_NAME . '/root/cimv2' );

      if ( is_object ( $obj ) )
      {
            $process = $obj->execquery ( "SELECT * FROM Win32_Process WHERE Name = '" . $check . "'" );

            if ( $process->count > 0 )
            {
                  echo 'explorer is running';
            }
            else
            {
                  echo 'explorer is not running';
            }

            $obj = null;
      }
      else
      {
            echo 'sorry can not create object: windows process check';
      }

?>

// get a list of all running processes (PHP 5)

<?
      define ( 'CPU_NAME', '.' );

      $obj = new COM ( 'winmgmts:{impersonationLevel=impersonate}//' . CPU_NAME . '/root/cimv2' );

      if ( is_object ( $obj ) )
      {
            $process = $obj->execquery ( "SELECT * FROM Win32_Process" );

            if ( $process->count > 0 )
            {
                  foreach ( $process AS $row )
                  {
                        echo "PID: " . $row->processid . ", PROCESS NAME: " . strtolower ( $row->name ) . ", MEMORY USAGE: " . number_format ( $row->workingsetsize ) . "\r\n<br />\r\n";
                  }
            }
            else
            {
                  echo 'no processes running';
            }

            $obj = null;
      }
      else
      {
            echo 'sorry can not create object: windows running processes';
      }

?>

// read a registry tree starting at the root of any tree (PHP4 ONLY) will not work in PHP5 as array by reference is broken!

<?
      $host = '.';

      define ( 'HKLM', 0x80000002 );

      $keys = new VARIANT ( '', VT_ARRAY );

          $path = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';

      $obj = new COM ( 'winmgmts:{impersonationLevel=impersonate}//' . $host . '/root/default:StdRegProv' );

      if ( is_object ( $obj ) )
      {
                $obj->EnumKey ( HKLM, $path, &$keys );

            $keys = $keys->value;

            foreach($keys as $key)
            {
                  echo $key . "\r\n<br />\r\n";
            }
      }
      else
      {
            echo 'Could not create object: registry read';
      }
?>

// get the processors on your system (type, speed, current load and more) (PHP 5) inherited class CIM_Processor

<?
      define ( 'CPU_NAME', '.' );

      $obj = new COM ( 'winmgmts:{impersonationLevel=impersonate}//' . CPU_NAME . '/root/cimv2' );

      $pc = 0;

      foreach ( $obj->instancesof ( 'Win32_Processor' ) as $mp )
      {
            echo "<pre>Processor (" . ++$pc . ")\r\n\r\n";
            echo " Processor Id: " . $mp->ProcessorId . "\r\n";
            echo "         Name: " . trim ( $mp->Name ) . " @ " . $mp->CurrentClockSpeed . " MHz\r\n";
            echo "     CPU Load: " . $mp->LoadPercentage . "%\r\n";
            echo "   CPU Status: " . $mp->Status . "\r\n";
            echo " CPU Stepping: " . $mp->Stepping . "\r\n";
            echo " CPU Revision: " . $mp->Revision . "\r\n";
            echo "  System Name: " . $mp->SystemName . "\r\n</pre>";
      }
?>

Need other examples, just ask!

ms!
by Ditongs | 2009/05/11 09:50 | Software | 트랙백 | 덧글(0)
인텔에서 온 편지

3가지는 꼭 직접 구현해 보고 싶었다. 첫째는 보호모드 OS를 만드는것, 둘째는 C 스크립트언어를 만드는것, 마지막 셋째는 영어 공부이다. 이제 약속했던 데드라인이 다가온다. 이 중에서 지킨게 뭐가 있나 되돌아 보니... 하나도 없다. 그래 이중에 하나라도 하자.
그래서 선택한 것이 OS 만들어보는 것이다. 인텔 홈페이지에 보면 IA-32 관련 개발자 메뉴얼이 존재한다. 이것은 OS를 개발하거나 어셈블리 컴파일러를 개발하는 시스템 개발자가 반드시 보아야 할 래퍼런스이다. 문제는 이 문서의 방대함과 원서에 대한 두려움이다. e-Book 형식으로 잘 되어 있지만 개인적으로 모니터 화면에서 나오는 빛으로 글을 인식하는 걸 매우 싫어한다. 즉 하드카피 된 책을 보는걸 좋아한다. 또한 이동하면서 볼 수 있다는게 가장 큰 매력이다. 큰 맘 먹고 나도 하드카피를 주문하기로 했다. 사실 e-mail 패킷을 바다 건너로 보내본적이 없던지라 매우 흥분되는 일 이었다. 2주도 채 되지 않아서 진짜로 도착했다! 인텔에서 5권이나 되는 방대한 문서를 하드카피로 보내온 것이다. 과연 착불일까? 비용이 슬슬 걱정되는데... 공짜였다! 그래, 나도 지금 인텔 CPU쓰고 있고 노트북도 다 인텔 CPU다. 하루에 한번 이상은 인텔 CPU가 내보내는 전자파를 맞으면 살고 있는 시대다! 이 정도 금액이야 인텔에서 개발자를 위해서 투자하는 것도 나쁘지 않겠군 :)

by Ditongs | 2009/03/17 09:40 | Software | 트랙백 | 덧글(0)
인생은 재귀적이다.

PC 환경이 점점 예전으로 돌아가고 있다. 이제 클라이언트에서 뭔가를 실행시킨다는 것 자체가 매우 위험한 일이 되어 버렸다. 범용성과 호환성을 목표로 하기 위해 네이티브 바이너리가 아닌 메타 명령어로 컴파일이 되어 버리기 때문에 소스 코드가 너무나도 적날하게 노출되어 버린다. 그래서 이런 기술을 사용하기가 매우 조심스럽다. 결국 안전한 서버측에서 사용하는 모양이다. 이런 상황이다 보니 실제 클라이언트에서는 할 일이 없어졌다. 그냥 입력을 받아서 서버에 전달해주고 결과를 받아서 화면에 출력해주는 정도다. 즉 터미날로 다시 돌아가고 있다. 정말 요즘 같은 추세라면 모니터에 이더넷 카드와 USB 단자만 달린 제품을 만들어서 팔고 싶어진다. 이미 판매 할지도 모르겠다. 보통 생각하는 것들은 잘 찾아보면 이미 시장에 나온것들이다. 아무튼 인생은 재귀적이다.

by Ditongs | 2009/03/13 15:28 | Idea and Plan | 트랙백 | 덧글(0)
[Driver] sc 명령어를 이용한 서비스 등록시 유의사항
sc라는 명령어가 있는지 몰랐을 때, net 명령어를 이용해서 서비스를 구동하곤 했다. 그런데 net 명령어는 서비스를 레지스트리에
등록하는게 존재하지 않아서 항상 불편했었다. 그래서 결국 서비스 관련 API를 이용해서 별도의  프로그램을 만들어 사용하곤 했는데 내가 만든 프로그램이다 보니 다른 PC에는 존재하지 않아서 역시나 불편하기 짝이 없었다. sc는 서비스 관련 API를 실행할 수 있도록 만들어진 윈도우즈 내장 프로그램이다. 가능한 OS는 아래에 나열했다.

  • Microsoft Windows NT Server 4.0, Terminal Server Edition
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Server 3.51
  • Microsoft Windows NT Server 4.0 Standard Edition

  • XP가 언급되지 않았는데 확인해 본 결과 XP에도 포함되어 있다. 아마 내가 XP 이전에 작성된 문서를 본 것 같다. 아쉽게도 VISTA에서는 정말로 빠진 듯 하다. WDF로 넘어오면서 철저한 보안검사 때문에 빠진듯 하다. 아무튼 서비스가 정상적으로 등록되어 있다면

    sc start 서비스이름

    또는

    net start 서비스이름

    을 이용해서 구동할 수가 있다. 난 습관적으로 net start를 이용하곤 하는데 타이핑면에서 sc가 효율적이므로 슬슬 케케묵은 습관은 버릴때가 되었다. 자, 이제 오늘의 핵심인 서비스를 등록하는 부분을 살펴보자. 일단 사용법을 살펴보기 위해서 sc create 라고 타이핑해봤다.

    Creates a service entry in the registry and Service Database.
    SYNTAX:
    sc create [service name] [binPath= ] <option1> <option2>...
    CREATE OPTIONS:
    NOTE: The option name includes the equal sign.
     type= <own|share|interact|kernel|filesys|rec>
           (default = own)
     start= <boot|system|auto|demand|disabled>
           (default = demand)
     error= <normal|severe|critical|ignore>
           (default = normal)
     binPath= <BinaryPathName>
     group= <LoadOrderGroup>
     tag= <yes|no>
     depend= <Dependencies(separated by / (forward slash))>
     obj= <AccountName|ObjectName>
           (default = LocalSystem)
     DisplayName= <display name>
     password= <password>

    이 보다 깔끔하게 잘 정리된 사용법도 없을 것이다. 실제 드라이버를 만들어서 등록하기 위해서 아래와 같이 타이핑했다.

    sc create Handle binPath="C:\Handle.sys" displayName="+_+ Win32 handle viewer" type=Kernle

    사용법대로 철자하나 틀리지 않게 잘 썼다고 생각하고 엔터를 눌렀지만 돌아오는것은 사용법에 관한 Echo뿐 ㅠ ㅠ
    무엇이 잘못 된 것일까? 난 sc 명령을 사용하는 사용자 권한 문제로 파악하고 administrator 권한으로 로그인하고 별의별 짓을
    다 했지만 결국 해결할 수가 없었다. 30분 정도의 웹 검색으로 알게 된 사.실!!!

    사용법을 잘 보시라! 옵션의 이퀄(=) 다음에 분명히!!!! 공백이 하나 존재한다!!!!!

    도움말과 사용법은 글자 하나 빠뜨리지 말고 꼼꼼하게! 세심하게 살핍시다. :(

    by Ditongs | 2009/02/26 10:27 | Software | 트랙백 | 덧글(5)
    ◀ 이전 페이지 다음 페이지 ▶